Python语法学习三之函数
一、简单函数定义和调用
def 函数名():
代码
# 无参数,无返回值的函数
def printName():
print "cehae"
printName()
# 无参数,有返回值的函数
def getAge():
return 18
print getAge()
# 有参数,无返回值的函数
def printSex(sex):
print sex
printSex("男")
# 有参数,有返回值的函数
def calculateNum(num):
result = 0
i = 1
while i <= num:
result = result + i
i += 1
return result
print('1~100的累积和为:%d' % calculateNum(100))
二、函数参数
2-1、缺省参数
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。
注意:带有默认值的参数一定要位于参数列表的最后面。
def printinfo(name, age=35):
# 打印任何传入的字符串
print "Name: ", name
print "Age ", age
# 调用printinfo函数
printinfo(name="miki")
printinfo(age=9, name="miki")
2-2、不定长参数
有时可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,声明时不会命名。
基本语法如下:
def functionname([formal_args,] *args, **kwargs):
"处理业务逻辑"
return 返回值
加了星号 * 的变量args会存放所有未命名的变量参数,args为元组;而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典。
# 可变参数演示示例
def fun(a, b, *args, **kwargs):
print "a =", a
print "b =", b
print "args =", args
print "kwargs: "
for key, value in kwargs.items():
print key, "=", value
fun(1, 2, 3, 4, 5, m=6, n=7, p=8) # 注意传递的参数对应

2-3、引用传参
Python中函数参数是引用传递(注意不是值传递)。
对于不可变类型,因变量不能修改,所以运算不会影响到变量自身;
而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量。
def selfAdd(a):
a += a
print id(a)
# 59206064
# 60911368
# 不可变对象,值传递
a = 1
print a, id(a)
# 1 59206088
# 调用函数
selfAdd(a)
print a, id(a)
# 1 59206088
# 可变对象,引用传递
a = [1, 2]
print a, id(a)
# [1, 2] 60911368
# 调用函数
selfAdd(a)
print a, id(a)
# [1, 2, 1, 2] 60911368

三、匿名函数
3-1、匿名函数定义
用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
lambda函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
示例
sum = lambda arg1, arg2: arg1 + arg2
#调用sum函数
print "Value of total : ", sum( 10, 20 )
print "Value of total : ", sum( 20, 20 )
3-2、匿名函数应用场景
3-2-1、场景1:函数作为参数传递
def fun(a, b, option):
print "a=", a
print "b=", b
print "result = ", option(a, b)
fun(1, 2, lambda x, y: x + y)
3-2-2、场景2:作为内置函数的参数
stus = [
{"name": "zhangsan", "age": 18},
{"name": "lisi", "age": 19},
{"name": "wangwu", "age": 17}
]
print stus
stus.sort()
print stus
stus.sort(key=lambda x: x["name"])
print stus
stus.sort(key=lambda x: x["age"])
print stus
本文来自博客园,作者:阿东知识库,转载请注明原文链接:https://www.cnblogs.com/adongdong2024/p/18113121

浙公网安备 33010602011771号