专业的销售网站,自已做的网站怎么做域名解析,wordpress站长之家,京东商城网官网 网上购物平台菜鸟教程《Python 3 教程》笔记#xff08;14#xff09; 14 函数14.1 参数传递14.1.1 可更改(mutable)与不可更改(immutable)对象14.1.2 python 传不可变对象实例 14.2 参数14.2.1 必需参数14.2.2 关键字参数14.2.3 默认参数14.2.4 不定长参数 14.3 匿名函数14.4 强制位置参… 菜鸟教程《Python 3 教程》笔记14 14 函数14.1 参数传递14.1.1 可更改(mutable)与不可更改(immutable)对象14.1.2 python 传不可变对象实例 14.2 参数14.2.1 必需参数14.2.2 关键字参数14.2.3 默认参数14.2.4 不定长参数 14.3 匿名函数14.4 强制位置参数 14 函数
出处 菜鸟教程 - Python3 函数
函数是组织好的可重复使用的用来实现单一或相关联功能的代码段。函数能提高应用的模块性和代码的重复利用率。
14.1 参数传递 在 python 中类型属于对象对象有不同类型的区分变量是没有类型的。她仅仅是一个对象的引用一个指针可以是指向 List 类型对象也可以是指向 String 类型对象。 14.1.1 可更改(mutable)与不可更改(immutable)对象
在 python 中strings、tuples 和 numbers 是不可更改的对象而 listdict 等则是可以修改的对象。
不可变类型 变量赋值 a5 后再赋值 a10这里实际是新生成一个 int 值对象 10再让 a 指向它而 5 被丢弃不是改变 a 的值相当于新生成了 a。可变类型 变量赋值 la[1,2,3,4] 后再赋值 la[2]5 则是将 list la 的第三个元素值更改本身la没有动只是其内部的一部分值被修改了。
python 函数的参数传递
不可变类型 类似 C 的值传递如整数、字符串、元组。如 fun(a)传递的只是 a 的值没有影响 a 对象本身。如果在 fun(a) 内部修改 a 的值则是新生成一个 a 的对象。可变类型 类似 C 的引用传递如 列表字典。如 fun(la)则是将 la 真正的传过去修改后 fun 外部的 la 也会受影响。
python 中一切都是对象严格意义我们不能说值传递还是引用传递我们应该说传不可变对象和传可变对象。
14.1.2 python 传不可变对象实例
def change(a):print(id(a)) # 指向的是同一个对象a10print(id(a)) # 一个新对象a1
print(id(a))
change(a)4379369136
4379369136
4379369424可以看见在调用函数前后形参和实参指向的是同一个对象对象 id 相同在函数内部修改形参后形参指向的是不同的 id。
14.2 参数
以下是调用函数时可使用的正式参数类型
必需参数关键字参数默认参数不定长参数
14.2.1 必需参数
必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样不然会出现语法错误。
14.2.2 关键字参数
使用关键字参数允许函数调用时参数的顺序与声明时不一致因为 Python 解释器能够用参数名匹配参数值。
14.2.3 默认参数
调用函数时如果没有传递参数则会使用默认参数。默认参数必须放在最后否则会报错。
14.2.4 不定长参数
语法 1
def functionname([formal_args,] *var_args_tuple ):函数_文档字符串function_suitereturn [expression]加了星号 * 的参数会以元组(tuple)的形式导入存放所有未命名的变量参数。
# 可写函数说明
def printinfo( arg1, *vartuple ):打印任何传入的参数print (输出: )print (arg1)print (vartuple)# 调用printinfo 函数
printinfo(10)
printinfo(70, 60, 50)# 输出:
10
70
(60, 50)语法 2
def functionname([formal_args,] **var_args_dict ):函数_文档字符串function_suitereturn [expression]加了两个星号 ** 的参数会以字典的形式导入。
#!/usr/bin/python3# 可写函数说明
def printinfo( arg1, **vardict ):打印任何传入的参数print (输出: )print (arg1)print (vardict)# 调用printinfo 函数
printinfo(1, a2,b3)# 输出:
1
{a: 2, b: 3}语法 3
声明函数时参数中星号 * 可以单独出现.如果单独出现星号 *则星号 * 后的参数必须用关键字传入。 def f(a,b,*,c):
... return abc
... f(1,2,3) # 报错
Traceback (most recent call last):File stdin, line 1, in module
TypeError: f() takes 2 positional arguments but 3 were givenf(1,2,c3) # 正常
614.3 匿名函数
Python 使用 lambda 来创建匿名函数。
lambda 的主体是一个表达式而不是一个代码块lambda 函数拥有自己的命名空间且不能访问自己参数列表之外或全局命名空间里的参数虽然 lambda 函数看起来只能写一行却不等同于 C 或 C 的内联函数内联函数的目的是调用小函数时不占用栈内存从而减少函数调用的开销提高代码的执行速度。
语法
lambda [arg1 [,arg2,.....argn]]:expression可以将匿名函数封装在一个函数内这样可以使用同样的代码来创建多个匿名函数
def myfunc(n):return lambda a : a * nmydoubler myfunc(2)
mytripler myfunc(3)print(mydoubler(11)) # 22
print(mytripler(11)) # 33lambda 匿名函数也是可以使用关键字参数进行参数传递也可以设定默认值。 14.4 强制位置参数
Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数不能使用关键字参数的形式。
在以下的例子中形参 a 和 b 必须使用指定位置参数c 或 d 可以是位置形参或关键字形参而 e 和 f 要求为关键字形参
def f(a, b, /, c, d, *, e, f):print(a, b, c, d, e, f)# 正确的调用
f(10, 20, 30, d40, e50, f60)
# 错误的调用
f(10, b20, c30, d40, e50, f60) # b 不能使用关键字参数的形式
f(10, 20, 30, 40, 50, f60) # e 必须使用关键字参数的形式