欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python 函数详解笔记

程序员文章站 2024-03-23 19:33:58
...


前言

学习使用任何一个机器都应该详细阅读它的说明书,而不是四处寻找零散的知识片段,对学习编程来说尤其如此,而自己以前总是喜欢四处百度来找答案,殊不知答案早已在官方文档里写的清清楚楚,明明白白。今天顿悟,悔恨不已!


[关于python函数的详细使用方法](https://docs.python.org/zh-cn/3/tutorial/controlflow.html) 提示:以下是本篇文章正文内容,下面案例可供参考

一、计算机函数是什么?

函数是指一段可以直接被另一段程序或代码引用的程序或代码。也叫做子程序、(OOP中)方法。
一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。在C语言中,子程序是由一个主函数和若干个函数构成的。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。
在程序设计中,常将一些常用的功能模块编写成函数,放在函数库*公共选用。要善于利用函数,以减少重复编写程序段的工作量。

二、python语言函数参数详解

1.参数类型

在python的函数中参数可分为位置参数(positional argument)和关键字参数(key ward argument)。位置参数是必填项,关键字参数是可选项

下面的例子中, 指定了位置参数为1,而关键字参数没有给实参。运行正常

>>> def pos_arg(pos,arg = 1):
...     pass
... 
>>> pos_arg(1)

下面的例子中,没有给定任何实参,此时报错。

>>> pos_arg()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: pos_arg() missing 1 required positional argument: 'pos'

给关键字参数任意实参,没有任何异常。

>>> pos_arg(1,arg = 666)
>>>

只给关键字参数实参会报错

>>> pos_arg(arg = 666)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: pos_arg() missing 1 required positional argument: 'pos'


2.仅限位置参数

仅限关键字参数要求不能使用关键字传递实参。在某些情况下,如果不使用限定关键字参数会导致意想不到的的错误,比如:

def foo(name, **kwds):
    return 'name' in kwds

该函数永远不可能返回True,因为实参会被name读取。 所以返回值永远是FALSE。

>>> foo(1, **{'name': 2})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: foo() got multiple values for argument 'name'
>>>

此时仅限关键字参数就派上用场了,代码如下:

def foo(name, /, **kwds):
    return 'name' in kwds
>>> foo(1, **{'name': 2})
True

可以看到在name后面出现了/这表示前面的参数是仅限位置参数,不接受关键字形式的参数,这就使得**{'name': 2}只能被**kwds吸收。

3.仅限关键字参数

仅限关键字参数使用*来表示后面的参数是只接受关键形式的参数而不接受位置参数,代码如下:

>>> def kwd_only_arg(*,arg):
...     print(arg)
... 
>>> kwd_only_arg(arg = 'hello,world')
hello,world

当给出位置参数时会报错,代码如下:

>>> kwd_only_arg('hello,world')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: kwd_only_arg() takes 0 positional arguments but 1 was given

4. 混合类型参数

请看下例:

>>> def combined_example(pos_only, /, standard, *, kwd_only):
...     print(pos_only, standard, kwd_only)

>>> combined_example('XueWeijuan say :','hello !',kwd_only='I say : hello')

XueWeijuan say : hello ! I say : hello !
>>> 

这个例子中,是混合了限定关键字参数和限定位置参数。

5.解包实参列表

函数调用要求独立的位置参数,但实参在列表或元组里时,要执行相反的操作。例如,内置的 range() 函数要求独立的 start 和 stop 实参。如果这些参数不是独立的,则要在调用函数时,用 * 操作符把实参从列表或元组解包出来:
–python官网

>>> list(range(3, 6))            # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> list(range(*args))            # call with arguments unpacked from a list
[3, 4, 5]

三、写给开发者

1.文档字符串 docstring

__doc__用于获取函数的说明文档,我们建议每一个开发者都要养成良好的编写docstring的习惯,代码只有一半是给机器读的,另一半是给人读的。下文教你如何给自己的函数模块编写说明文档。

1.第一行应为对象用途的简短摘要。为保持简洁,不要在这里显式说明对象名或类型,因为可通过其他方式获取这些信息(除非该名称碰巧是描述函数操作的动词)。这一行应以大写字母开头,以句点结尾。

2.文档字符串为多行时,第二行应为空白行,在视觉上将摘要与其余描述分开。后面的行可包含若干段落,描述对象的调用约定、副作用等

3.Python 解析器不会删除 Python中多行字符串字面值的缩进,因此,文档处理工具应在必要时删除缩进。这项操作遵循以下约定:文档字符串第一行 之后 的第一个非空行决定了整个文档字符串的缩进量(第一行通常与字符串开头的引号相邻,其缩进在字符串中并不明显,因此,不能用第一行的缩进),然后,删除字符串中所有行开头处与此缩进“等价”的空白符。不能有比此缩进更少的行,但如果出现了缩进更少的行,应删除这些行的所有前导空白符。转化制表符后(通常为 8 个空格),应测试空白符的等效性。

请看代码实例:

>>> def test():
...     """This is just a document and it do nothing."""        
...     pass
... 
>>> print(test.__doc__)
This is just a document and it do nothing.
>>> 

总结

本文系统的介绍了python函数参数的类型,包括位置参数和关键字参数。位置参数是必选项,关键字参数是选填项目,通常情况若不指定参数则使用默认参数。在实际开发中,使用限定关键字参数和限定位置参数也是常有的事情。前者使用/,后者使用*。另外写给开发者的建议中,包含了写出人类高质量代码的建议(记得要写文档哦!)。如果你觉得本文还不错,不妨留下一个免费的赞让更多的人看到!