@ python 函数的参数传递
不可变(immutable)类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。
可变(mutable)类型:类似 c++ 的引用传递,如 列表,字典。如 fun(a),将a真正的传过去,修改后函数外部的a也会受影响。
python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
因此,可变对象在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。
@ 调用函数时缺少必须参数,程序会报错;关键字参数是在调用函数时指定参数名;默认参数是在定义函数时给参数一个默认值
@ 不定长参数
(1)加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。
def functionname([formal_args,] *var_args_tuple ):
"函数_文档字符串"
function_suite
return [expression]
[例]
#!/usr/bin/python3
# 可写函数说明
def printinfo( arg1, *vartuple ):
"打印任何传入的参数"
print ("输出: ")
print (arg1)
print (vartuple)
# 调用printinfo 函数
printinfo( '番茄锅底', '牛肉', '五花肉','虾滑','鱼豆腐','土豆','生菜')
输出:
番茄锅底
('牛肉', '五花肉', '虾滑', '鱼豆腐', '土豆', '生菜')
(2)加了两个星号 ** 的参数会以字典的形式导入。
#!/usr/bin/python3
# 可写函数说明
def printinfo( arg1, **vardict ):
"打印任何传入的参数"
print ("输出: ")
print (arg1)
print (vardict)
# 调用printinfo 函数
printinfo('鸳鸯锅', '肉类'=['牛肉', '五花肉', '虾滑'],'素食'=['冻豆腐', '土豆', '生菜'])
输出报错!
File "test.py", line 11
printinfo('鸳鸯锅', '肉类'=['牛肉', '五花肉', '虾滑'],'素食'=['冻豆腐', '土豆', '生菜'])
^
SyntaxError: keyword can't be an expression
修改一下。把关键字的引号去掉
#!/usr/bin/python3
# 可写函数说明
def printinfo( arg1, **vardict ):
"打印任何传入的参数"
print ("输出: ")
print (arg1)
print (vardict)
# 调用printinfo 函数
printinfo('鸳鸯锅', 肉类=['牛肉', '五花肉', '虾滑'],素食=['冻豆腐', '土豆', '生菜'])
输出:
鸳鸯锅
{'肉类': ['牛肉', '五花肉', '虾滑'], '素食': ['冻豆腐', '土豆', '生菜']}
@ 匿名函数
语法:lambda [arg1 [,arg2,.....argn]]:expression
[例]
>>> sum = lambda arg1, arg2: arg1 + arg2;
>>> sum(1,2)
3
>>> sum = lambda arg1=6, arg2: arg1 + arg2; #有默认值的参数要写在最后,不仅匿名函数如此!
SyntaxError: non-default argument follows default argument
>>>
>>> sum = lambda arg1=6, arg2=6: arg1 + arg2;
>>> sum(1,)
7
>>>
>>> sum = lambda arg1, arg2=6: arg1 + arg2
>>>
>>>
@ 不带参数值的return语句返回None
@ 装饰器
https://www.runoob.com/w3cnote/python-func-decorators.html
@ Python3 内置函数
https://www.runoob.com/python3/python3-built-in-functions.html