5.1函数基本语法
# 函数语法格式 def 函数名(形参列表): """""函数的说明文档" //由零条或多条可执行语句组成的函数 [return [返回值]] 详细说明: 1.函数名建议由一个或多个有意义的单词连缀而成,每个单词的字母全部小写,单词间用_分隔 对于返回多个值的情况:可将多个值包装成列表后返回,也可直接返回多个值(python会自动将多个返回值封装成元组) 2.函数的返回值可以是一个值、多个值或者为表达式 3.函数声明之后、函数体之前的部分,视为函数的说明文档,可通过函数名.__doc__查看
def sum_and_avg(list): sum = 0 count = 0 for e in list: # 如果元素e是数值 if isinstance(e, int) or isinstance(e, float): count += 1 sum += e return sum, sum / count my_list = [20 , 15 , 2.8,'a', 35 , 5.9, -1.8] tp = sum_and_avg(my_list) print(tp) # 返回结果是元组 s, avg = sum_and_avg(my_list) # 可以使用多个变量接受函数返回的多个值(序列解包) print(s) print(avg) 输出结果: (76.9, 12.816666666666668) 76.9 12.816666666666668
5.2函数参数
位置参数:根据位置传入参数
关键字参数:根据参数名来传入参数
def girth(width, height): print("", width) print("height:", height) return 2 * (width + height) print(girth(3.5, 4.8)) # 位置参数 print(girth(width=3.5, height=4.8)) # 关键字参数 print(girth(height=4.8, width=3.5)) # 关键字参数 print(girth(3.5, height=4.8)) # 调用函数时混合使用关键字参数和位置参数,则关键字参数必须位于位置参数之后
参数默认值:
""" 参数默认值: 在某些情况下,程序需要在定义函数时为一个或多个形参指定默认值-这样在调用函数时就可以省略为该形参传入参数值,而是直接使用该形参的默认值 """ def say_hi(name='孙悟空', message="欢迎来到疯狂软件"): print(name, ",您好") print("消息是:", message) say_hi() # 全部使用默认值 say_hi("白骨精") say_hi("白骨精", "欢迎学习python") say_hi(message="欢迎学习python") say_hi('白骨精', message="欢迎学习python") # 调用函数时关键字参数必须位于位置参数的后面 输出结果: 孙悟空 ,您好 消息是: 欢迎来到疯狂软件 白骨精 ,您好 消息是: 欢迎来到疯狂软件 白骨精 ,您好 消息是: 欢迎学习python 孙悟空 ,您好 消息是: 欢迎学习python 白骨精 ,您好 消息是: 欢迎学习python
可变参数 *变量名 :可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple
"""形参前加个*意味着该参数可以接收多个参数值,多个参数值被当作元组传入""" def test(*nums): for i in nums: print(i) aa = [1, 2] print('------') test(aa) # 不加*的话会被当做一个参数 print('------') test(*aa) print('------') test(3, 4) 输出结果: ------ [1, 2] ------ 1 2 ------ 3 4
版本
|
函数定义 |
调用
|
说明
|
不使用可变参数
|
def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
|
calc([1, 2, 3])
|
调用的时候,需要先组装出一个list或tuple
|
使用可变参数
|
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
|
calc(1, 2)
|
如果已经有一个list需要调用
方法一:(此方法太繁琐)
>>> nums = [1, 2, 3]
>>> calc(nums[0], nums[1], nums[2])
方法二:
>>> nums = [1, 2, 3]
>>> calc(*nums)
14
|
关键字参数 **kw
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw) person('Michael', 30) person('Bob', 35, city='Beijing') person('Adam', 45, gender='M', job='Engineer') extra = {'city': 'Beijing', 'job': 'Engineer'} person('Jack', 24, city=extra['city'], job=extra['job']) # 可以先组装出一个dict,然后,把该dict转换为关键字参数传进去 extra = {'city': 'Beijing', 'job': 'Engineer'} # 简化一下 person('Jack', 24, **extra) outputs: name: Michael age: 30 other: {} name: Bob age: 35 other: {'city': 'Beijing'} name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'} name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'} name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
函数参数的传递机制:
5.4函数的高级内容