Python3 菜鸟教程 笔记6 -- 函数

@ 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章