大纲:
-
初识函数
-
函数的参数
-
函数的返回值
1. 初识函数
函数到底是个什么东西?
函数,可以当做是一大堆功能代码的集合。
def 函数名():
函数内编写代码
...
...
函数名()
例如:
# 定义名字叫info的函数
def info():
print("第一行")
print("第二行")
print("第n行...")
info()
什么时候会用到函数?
什么时候会用到函数呢?一般在项目开发中有会有两种应用场景:
-
有重复代码,用函数增加代码的重用性。
def send_email(): # 10行代码 print("欢迎使用计算机监控系统") if CPU占用率 > 90%: send_email() if 硬盘使用率 > 99%: send_email() if 内存使用率 > 98%: send_email() ...
-
代码太长,用函数增强代码的可读性。
def calculate_same_num_rule(): """判断是否是豹子""" pass def calculate_same_color_rule(): """判断是否是同花""" pass def calculate_straight_rule(): """判断是否顺子""" pass def calculate_double_card_rule(poke_list): """判断是否对子""" pass def calculate_single_card_rule(): """判断是否单牌""" pass
# 1. 生成一副扑克牌
card_color_list = ["红桃", "黑桃", "方片", "梅花"] card_nums = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] # A all_card_list = [[color, num] for color in card_color_list for num in card_nums]
# 2.洗牌
random.shuffle(all_card_list)
# 3.给玩家发牌 ... # 4.判断牌是:豹子?同花顺?顺子?对子?单点? calculate_same_num_rule() calculate_same_color_rule() calculate_straight_rule() ...
我们是按照逻辑从上到下逐步完成,称为:面向过程编程;现在学了函数之后,利用函数编程称为:函数式编程。
2. 函数的参数
2.1 参数
在定义函数时,如果在括号中添加变量
,我们称它为函数的形式参数:
# ###### 定义有三个参数的函数(a1/a2/a3一般称为形式参数-形参) #####
def func(a1,a2,a3):
print(a1+a2+a3)
# 执行函数并传入参数(执行函数传值时一般称为实际参数-实参)
func(11,22,33)
# 执行函数并传入参数
func(9,2,103)
-
位置传参
def add(n1,n2): print(n1+n2) add(1,22)
-
关键字传参
def add(n1,n2): print(n1+n2) add(n1=1,n2=22)
"""
1. 形参
2. 实参
3. 位置传参
4. 关键字传参
"""
# ###### 定义有三个参数的函数(a1/a2/a3一般称为形式参数-形参) #####
def func(a1, a2, a3):
print(a1 + a2 + a3)
# 执行函数并传入参数(执行函数传值时一般称为实际参数-实参)
func(11, 22, 33)
# 执行函数并传入参数
func(9, 2, 103)
# 执行函数
func(a1=99, a2=88, a3=1)
func(a1=99, a3=1, a2=88)
2.2 默认参数
def func(a1, a2, a3=10):
print(a1 + a2 + a3)
# 位置传参
func(8, 19)
func(1, 2, 99)
# 关键字传参(位置和关键混合时,关键字传参要在后面)
func(12, 9, a3=90)
func(12, a2=9, a3=90)
func(a1=12, a2=9, a3=90)
file_object = open("xxx.txt")
2.3 动态参数
-
*
def func(*args): print(args) # 元组类型 (22,) (22,33,99,) () # 只能按照位置传参 func(22) func(22,33) func(22,33,99) func()
-
**
def func(**kwargs): print(kwargs) # 字典类型 {"n1":"ayden"} {"n1":"ayden","age":"18","email":"xxxx"} {} # 只能按关键字传参 func(n1="ayden") func(n1="adyen",age=18) func(n1="adyen",age=18,email="[email protected]")
-
*,**
def func(*args,**kwargs): print(args,kwargs) # (22,33,99) {} func(22,33,99) func(n1="ayden",age=18) func(22,33,99,n1="ayden",age=18) func()
提示:字符串格式化时的format功能。
v1 = "我叫{},今年{},性别{}".format("ayden",18,"男") v2 = "我叫{name},今年{age},性别{gender}".format(name="adyen",age=18,gender="男")
注意事项
# 1. ** 必须放在 * 的后面
def func1(*args, **kwargs):
print(args, **kwargs)
# 2. 参数和动态参数混合时,动态参数只能放在最后。
def func2(a1, a2, a3, *args, **kwargs):
print(a1, a2, a3, args, **kwargs)
# 3. 默认值参数和动态参数同时存在
def func3(a1, a2, a3, a4=10, *args, a5=20, **kwargs):
print(a1, a2, a3, a4, a5, args, kwargs)
func3(11, 22, 33, 44, 55, 66, 77, a5=10, a10=123)
3. 函数返回值
我们希望函数可以帮助我们实现某个功能,但让函数实现某功能之后有时也需要有一些结果需要反馈给我们,例如:
import requests
from xml.etree import ElementTree as ET
def xml_to_list(city):
data_list = []
url = "http://ws.webxml.com.cn//WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName={}".format(city)
res = requests.get(url=url)
root = ET.XML(res.text)
for node in root:
data_list.append(node.text)
return data_list
result = xml_to_list("北京")
print(result)
def func():
return 666
res = func()
print(res) # 666
def magic(num):
result = num + 1000
return result
data = magic(9)
print(data) # 1009
在了解了返回值的基本使用之后,接下来有3个关键知识:
-
返回值可以是任意类型,如果函数中没写return,则默认返回None
def func(): return [1,True,(11,22,33)] result = func() print(result) def func(): value = 1 + 1 ret = func() print(ret) # None
当在函数中
未写返回值
或return
或return None
,执行函数获取的返回值都是None。def func(): value = 1 + 1 return # 或 return None ret = func() print(ret) # None
-
return后面的值如果有逗号,则默认会将返回值转换成元组再返回。
def func(): return 1,2,3 value = func() print(value) # (1,2,3)
-
函数一旦遇到return就会立即退出函数(终止函数中的所有代码)
def func(): print(1) return "结束吧" print(2) ret = func() print(ret) def func(): print(1) for i in range(10): print(i) return 999 print(2) result = func() print(result) # 输出 1 0 999 def func(): print(1) for i in range(10): print(i) for j in range(100): print(j) return print(2) result = func() print(result) # 输出 1 0 0 None
总结
-
如何定义一个函数?
-
函数名的规范。(同变量名规范)
-
规范
-
建议
def change_num(): pass
-
-
函数的注释,说明函数的作用。
def encrypt(origin): """ 用于数据加密和xxx """ pass
-
定义函数时,参数一般有以下情况(形式参数)
-
情景1
def func(a1,a2): pass
-
情景2:
def func(a1,a2=123): pass
-
情景2:
def func(*args,**kwargs): pass
-
-
函数的返回值,一般用于将函数执行的返回给调用者。
-
默认返回None
-
遇到return则函数执行完毕
-
标签:函数,a1,a2,参数,func,print,返回值,def From: https://www.cnblogs.com/zhengyongwu/p/17855388.html