本文是我在学习过程中的笔记,学习资料包括菜鸟笔记、相关的视频、书籍
定义函数
函数的作用:存储一段可以重复执行的程序,存储逻辑
- 程序使用更加简洁,
- 可以重复使用
- 代码更加具有可读性,读函数名称和注释就可以知道代码的作用
定义函数的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ( )。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号 : 起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。
#函数的表示
'''
def 函数名称(参数1,参数2,参数 3):
(缩进)函数体
函数体里面的内容,外面看不到
外面看到的:函数名称、参数值(输入)、返回值(输出)
return 返回值
'''
def swap(x,y):
""" 交换x,y的值 """
c=y+1
return {'a':c, 'b':x}
调用函数
通过 “函数名(参数列表)”的方式调用函数
函数体里面的内容只有当函数被调用时才会执行
- print: 将某一个值打印(输出)到屏幕上面
- return: 函数定义体输出的东西,使用变量去接收函数的返回值
#python 定义函数
def add(x):
y = x+1
#return 返回
return y
# 调用函数
a = int(input('请输入一个数:'))
b = add(a) #调用add函数
print(b)
函数返回值
return [表达式] 输出返回值。不带参数值的return语句返回None
函数体里面程序遇到return就终止,不会再继续执行了
def get_bmi (height):
if height >185:
return '高'
print ('不是高个')
if height < 34:
return '矮'
print ('也不是矮个')
return '普通人'
执行结果
D:\Python\Python37\python.exe D:/PycharmProjects/pythonProject1/test.py
高
Process finished with exit code 0
函数参数
- 函数的定义和函数的调用,参数要一一对应
- 形式参数要赋值=实际参数,要一一对应
- 形式参数和实际参数是一个萝卜一个坑
- 位置参数:形式参数和实际参数要根据位置(顺序)一一赋值
位置参数
- 位置参数定义时和使用时要一 一对应,按照使用时传递的顺序赋值
#定义函数
def package (name,money,food):
print('恭喜{} 拿到了一个{}的offer。'.format(name,money))
return
#调用函数
package('nancy','20K','西瓜')
package('20K','nancy','西瓜')
*************执行结果*****************
D:\Python\Python37\python.exe D:/PycharmProjects/pythonProject1/test.py
恭喜nancy 拿到了一个20K的offer。
恭喜20K 拿到了一个nancy的offer。
Process finished with exit code 0
- 调用函数时的参数个数和定义数量不一致时会报错
#定义函数
def package (name,money,food):
print('恭喜{} 拿到了一个{}的offer。'.format(name,money))
return
#调用函数
package('nancy','20K')
*************执行结果*****************
Traceback (most recent call last):
File "D:/PycharmProjects/pythonProject1/test.py", line 5, in <module>
package('nancy','20K')
TypeError: package() missing 1 required positional argument: 'food'
Process finished with exit code 1
关键字参数
位置参数需要一 一对应,如果参数多时调用时使用不方便,可以使用关键字参数来确定传入的参数值
- 关键字参数允许函数调用时参数的顺序与声明时不一致
- 可以部分作为关键字参数,部分做位置参数,但是位置参数要在关键字 参数前面
# 定义函数
def package (name,money,food):
print('恭喜{} 拿到了一个{}的offer。'.format(name,money))
return
# 调用函数
package(money='50K',name='小马',food='海鲜') #调用时和声明时顺序不一致
package('小马',money='50K',food='海鲜') #先位置参数,再关键字参数
************执行结果************
D:\Python\Python37\python.exe D:/PycharmProjects/pythonProject1/test.py
恭喜小马 拿到了一个50K的offer。
恭喜小马 拿到了一个50K的offer。
Process finished with exit code 0
位置参数在关键字参数之后会报错
# 定义函数
def package (name,money,food):
print('恭喜{} 拿到了一个{}的offer。'.format(name,money))
return
# 调用时位置参数在关键字参数之后报错
package('小马',money='50K','海鲜')
************执行结果**************
D:\Python\Python37\python.exe D:/PycharmProjects/pythonProject1/test.py
File "D:/PycharmProjects/pythonProject1/test.py", line 7
package('小马',money='50K','海鲜')
^
SyntaxError: positional argument follows keyword argument
Process finished with exit code 1
默认参数
- 当函数定义的时候有默认参数,那么在调用的时候,具有默认参数可以不传实际参数,使用默认参数作为实际参数
- 默认参数的作用在于调用时可以少传参数
- 定义的时候复杂,调用的时候简单
- 默认参数也必须放在位置参数的后面
# 定义函数
def package (name,money,food='榴莲'):
print('恭喜{} 拿到了一个{}的offer。'.format(name,money))
print('{}最喜欢吃{}'.format(name, food))
return
# 调用函数
package('nancy','20K')
******执行结果*********
D:\Python\Python37\python.exe D:/PycharmProjects/pythonProject1/test.py
恭喜nancy 拿到了一个20K的offer。
nancy最喜欢吃榴莲
Process finished with exit code 0
不定长参数
不知道需要定义多少个参数,可以使用不定长参数
- 在函数定义里面,可以用*value去接收多余的位置参数
- 在函数定义里面,value是元组
# 定义函数
def sum_total(a, b, *args):
"""*args 表示剩下的多余的参数"""
#在函数定义里面,可以用*args去接收多余的位置参数
#在函数定义里面,args是元组
print(args)
total = 0
c = total + a + b
for i in args:
c+=i
return c
# 调用函数
print(sum_total(3,4,5,6,7,8))
在函数调用中也可以用*value,可以是列表也可以是元组
# 定义函数
def sum_total(a, b, *args):
"""*args 表示剩下的多余的参数"""
#在函数定义里面,可以用*args去接收多余的位置参数
#在函数定义里面,args是元组
print(args)
total = 0
c = total + a + b
for i in args:
c+=i
return c
# 调用函数
print(sum_total(3,4,5,6,7,8))
# 列表
rest = [1,2,4]
print(sum_total(3,4,*rest))
#元组
rest =(1,2,3)
print(sum_total(3,4,*rest))
**************执行结果***********
D:\Python\Python37\python.exe D:/PycharmProjects/pythonProject1/test.py
(5, 6, 7, 8)
33
(1, 2, 4)
14
(1, 2, 3)
13
Process finished with exit code 0
- 可以使用**kwargs 表示接收多余的关键字参数
def sum_total(a, b, *args,hobby='eat',**kwargs):
"""**kwargs 表示接收多余的关键字参数"""
#函数体里面使用kwargs 是字典的形式接收多余的关键字参数
print(args)
print(kwargs)
sum_total(3,4,5,6,6,name='nice',age=18)
other_info = {'food':'辣条','date':7}
# 函数外面可以用两个
sum_total(3,4,5,6,6,name='nice',age=18,**other_info)
********执行结果*******
D:\Python\Python37\python.exe D:/PycharmProjects/pythonProject1/test.py
(5, 6, 6)
{'name': 'nice', 'age': 18}
(5, 6, 6)
{'name': 'nice', 'age': 18, 'food': '辣条', 'date': 7}
Process finished with exit code 0
总结
- 函数的返回return后面是返回值,遇到return就结束
- 函数参数-位置参数:一一对应,顺序要一直
- 关键字参数:1、有标记,好记 2、可以换顺序
- 默认参数 :可以少传参数
- 顺序:位置参数在最前面,关键字参数和默认参数在后面