Python-函数
Python中通过pass忽略代理架构错误,用来组织代码架构体系
函数相关关键字: def return * ** pass
为何需要函数?
1. 功能重用,避免重复代码
2. 组织代码和隐藏细节
3. 可读性
函数整体架构
def funcName(variable, ..., *args, **kwargs):
pass
函数原数据有哪些?
1. 函数名 .__name__
2. 函数注释 .__doc__
3. 函数所在模块 .__modul__
4. 函数默认参数元组 .__defaults__
5. 函数代码属性 .__code__
def bei_men_chui_xue(skin='yellow'):
"""北门吹雪"""
name = '北门吹雪'
age = 18
pass
print("函数名:", bei_men_chui_xue.__name__)
print("函数注释:", bei_men_chui_xue.__doc__)
print("函数默认参数组:", bei_men_chui_xue.__defaults__)
print("函数代码属性:", bei_men_chui_xue.__code__)
形式参数是什么?
函数中用来代替真实的数据,如y=x+1,中x就是形式参数,y是函数执行结果返回值
1. 必须参数。函数调用时候必须传递的参数,不能放在默认参数之后
def bei_men_chui_xue(name, skin='yellow'):
"""北门吹雪"""
print(name)
pass
bei_men_chui_xue("北门吹雪")
2. 默认参数。有传参则覆盖默认值,无传参则启动默认值,默认参数不应该过长,过长则可以通过对象传递进去
from collections import namedtuple
def bei_men_chui_xue(info, skin='yellow', country="中国"):
"""北门吹雪"""
print(info.name, info.age, skin, country)
pass
info = namedtuple("Info", ["name", "age"])
info.name = "北门吹雪"
info.age = 18
bei_men_chui_xue(info, skin='white')
3. 可变参数,多余参数组成新元组
def bei_men_chui_xue(name, *args):
"""北门吹雪"""
print(name, args, type(args))
pass
bei_men_chui_xue("北门吹雪", 18, "中国")
4. 可变关键字参数,多余参数组成字典
def bei_men_chui_xue(name, **kwargs):
"""北门吹雪"""
print(name, kwargs, type(kwargs))
pass
bei_men_chui_xue("北门吹雪", age=18, country="中国")
5. 形式参数顺序为: 必须参数(必须放到首位)、默认参数、可变参数
什么是传参?
函数在执行或者类实例化的时候,需要一些值,传入这些值
1. 不指定形参名,依次依顺序传递进去,考虑传参顺序
def bei_men_chui_xue(name, age, country):
"""北门吹雪"""
print(name, age, country)
pass
bei_men_chui_xue("北门吹雪", 18, "中国
2. 形参关键字传值,不需要考虑顺序,增强代码可读性
def bei_men_chui_xue(name, age, country):
"""北门吹雪"""
print(name, age, country)
pass
bei_men_chui_xue(name="北门吹雪", age=18, country="中国")
3. 必须参数必须传值
4. 解包可迭代对象,依次依顺序把元素传递进去 *
def bei_men_chui_xue(name, age, country):
"""北门吹雪"""
print(name, age, country)
pass
bei_men_chui_xue(*("北门吹雪", 18, "中国"))
5. 解包字典,字典的key是关键字参数的参数名,字典的value是关键字的实参 **
def bei_men_chui_xue(name, age, country):
"""北门吹雪"""
print(name, age, country)
pass
bei_men_chui_xue(**{'name': "北门吹雪", 'age': 18, 'country': "中国"})
什么是函数返回?
函数执行完,需要返回其处理结果,有时我们就需要这样的结果, return
1. 碰到return函数将返回并结束函数
def bei_men_chui_xue(name, age, country):
"""北门吹雪"""
return name
print(name, age, country)
return age, country
r = bei_men_chui_xue(**{'name': "北门吹雪", 'age': 18, 'country': "中国"})
print(r)
# 有时需要巧用return关键字,在一些if分支中,分支本身就只能走其中一个,联合return结束函数
def bei_men_chui_xue(name, age, country):
"""北门吹雪"""
if age >= 18:
return name
else:
return country
r = bei_men_chui_xue(**{'name': "北门吹雪", 'age': 17, 'country': "中国"})
print(r)
2. 可以有1个或多个返回值,多个返回值以逗号隔开,结果则组合成元组形式
def bei_men_chui_xue(name, age, country):
"""北门吹雪"""
return name, age, country
r = bei_men_chui_xue(**{'name': "北门吹雪", 'age': 17, 'country': "中国"})
print(r, type(r))
3. 当函数没有返回值的时候,返回None
def bei_men_chui_xue(name, age, country):
"""北门吹雪"""
return
r = bei_men_chui_xue(**{'name': "北门吹雪", 'age': 17, 'country': "中国"})
print(r, type(r))
函数执行顺序: 先定义再调用,逐行从上到下依次解释执行
* 放在形参中表示把多余参数组成新的元组,在实参中则解包可迭代对象依次依顺序传递进函数
** 放在形参中表示把多余关键字参数组成新的字典,在实参中则解包字典,把字典的key当作实参关键字,字典的value当作实参关键字的值
小知识:
自定义递归(问题规模缩小,有结束条件)限制,Python默认999次
递归大兄弟,自己玩自己,太多内存受不了
import sys
sys.setrecursionlimit(num)