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)

  

版权声明:本文为2bjiujiu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/2bjiujiu/p/9136576.html