python 函数详解笔记


前言

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


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山河锦绣放眼好风光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值