• Python -- 函数


    5.1 函数的定义

    函数是对功能或者动作的封装

    def  函数名(形参列表):  # 形式参数
    	函数体(return)
        return"返回值"     # return表示返回,这个函数在调用之后会得到一个结果 
    函数名(实参列表)        # 实际参数  将实际参数赋值给形式参数
    变量 = 函数名   #  接收return返回值   
    
    # 函数例子 -- 登录验证
    def login(username, password):
        if username == "Agoni" and password == "123":
            return True
        else:
            return False
    name = input("请输入账号")
    password = input("请输入密码")
    if login(name, password):
        print("进入主页面")
    else:
        print("账号或密码错误")
    

    当函数执行之后,可以给调用者一个返回值 return 表示返回. 这个函数在调用之后会的得到一个结果.

    • 在函数中不写return 表示函数没有返回值,调用方接收到的是None.
    • return 可以终止一个函数的运行
    • 在函数中写了return ,但是return 没有值,表示函数没有返回值,接收的是None
    • 在函数中写return, 后面可以跟多个值,表示返回多个值,接收方收到的是元组

    5.2 函数参数

    # 参数:函数在调用的时候给函数传递的信息
    1.形参: 在函数声明的位置的变量
    2.实参:在函数调用的时候给出具体的值
    3.传参:把实参赋值给形参的过程
    
    # 实参的分类:
    1. 位置参数,按照位置给形参赋值
    2. 关键字参数.按照形参的名字给参数赋值
    3. 混合参数.位置参数必须放在前面,关键字参数在后面
    
    # 形参的分类:(3大类)
    1. 位置参数. 按照位置来声明形参
    2. 默认值参数. 当给参数传递值的时候,默认值不起作用. 默认值必须放在后面
    3. 动态参数 (*args, **kwargs)
    
    # 参数位置顺序  位置 *agrs 默认值 **kwargs
    1. *args 位置参数的动态传参,系统会自动把所有的位置参数聚合成元组
    2. **kwargs 关键字参数的动态传参,系统会自动把所有的关键字参数聚合成字典
    3. def (*args,**kwargs)  无敌传参,可以是任何参数
    

    5.3 函数参数举例

    # 位置参数
    def food(moring,noon,night):
        print(moring,noon,night)
    food("牛奶","面条","粥")
    
    # 关键字参数
    def food(moring,noon,night):
        print(moring,noon,night)
    food(noon="面条",night="粥",moring="牛奶")
    
    # 混合参数   位置参数必须放在关键字参数前面
    def food(moring,noon,night):
        print(moring,noon,night)
    food("牛奶","面条",night="粥")
    
    # 默认值参数
    def food(moring,noon,night="烧烤"):
        print(moring,noon,night)
    food("牛奶","饺子")   # 牛奶 饺子 烧烤
    food("面包","米饭")   # 面包 米饭 烧烤
    food("鸡蛋","凉皮")   # 鸡蛋 凉皮 烧烤
    
    # 动态参数  *args   位置动态参数
    def Agoni(*food):  # * 表示不定参数,可以传递任意个参数,接收到的是元组
    	print("我要吃",food)
    Agoni("鸡翅","芝士肋排","烤肉")
    # 我要吃 ('鸡翅', '芝士肋排', '烤肉')
    
    # 动态参数  **kwargs  关键字传参的动态参数 
    def funk(**kwargs):
        print(kwargs)  #  接收到的是字典
    funk(a=1,b=1,c=3)
    # {'a': 1, 'b': 2, 'c': 3}
    
    def funk(*args):
        print(args)
    lst = ["梅西","哈维","伊涅斯塔","皮克"]
    funk(*lst)   #  *在实参位置表示打散,打散的是可迭代对象
    # ('梅西', '哈维', '伊涅斯塔', '皮克')
    
    def funk(**kwargs):
        print(kwargs)
    dic = {"阿根廷":"梅西","葡萄牙":"C罗","巴西":"内马尔"}
    funk(**dic)  # **在这里是把字典打散  此时字典中的key必须是字符串
    # {'阿根廷': '梅西', '葡萄牙': 'C罗', '巴西': '内马尔'}
    
    # * 处理剩下的元素
    a,*b = (1, 2, 3, 4,)
    print(a, b) # 1 [2, 3, 4]
    *rest,a,b = range(5)
    print(rest, a, b) # [0, 1, 2] 3 4
    print([1, 2, *[3, 4, 5]]) # [1, 2, 3, 4, 5]
    

    5.4 名称空间

    1.Python最开始会开辟一个自己的命名空间 -- 内置命名空间
    2.直接在py文件一个层面上是全局名称空间
        a = 1
        print(a)
    3.在函数内部属于局部名称空间
        def func():
            s = 1
    # 加载顺序: 内置 -- 全局 -- 局部
    # 取值顺序: 局部 -- 全局 -- 内置
        a = 1
        def s():
            print(a)
        s()
    

    5.5 作用域

    # 作用域: 变量或者函数的声明周期
    
    1. 全局作用域: 全局名称空间+内置名称空间
    2. 局部作用域:局部名称空间
       globals() 查看全局作用域中的内容
       locals()   查看当前作用域中的内容
    3. global  nonlocal
       global : 在局部引入全局变量
       nonlocal : 在局部,引入离他最近的那一层变量
    

    5.6 函数的嵌套

    def outer():
        def inter():
            print("我是内部")
        print("我是外部")
        inter()
    outer() 
    # 我是内部
    # 我是外部
    
    # 函数的嵌套和 global , nonlocal 的结合
    a = 10
    def func():
        global a   # 引入全局中的变量a   可以定于全局变量
        a = 20
        print(a)
    print(a)   # 是全局中a的值
    func()     # 函数(局部)中a的值
    print(a)   # 将全局中a拉进函数内部,重新赋值,全局中a也改变
    # 结果 10 20 20 
    
    def outer():
        a = 10
        def inner():
            nonlocal a  # 找的是局部当中,最近的上层变量
            a = 20
            print(a)
        print(a)   # 10
        inner()    # 20
        print(a)   # 20
    outer()
    
  • 相关阅读:
    [转]C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现
    C#设置System.Net.ServicePointManager.DefaultConnectionLimit,突破Http协议的并发连接数限制
    [转]WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键
    [转]C#打印DataGridView的例子源码
    c# TreeView 父节点选中/不选时子节点都同步选中/不选
    C#中PictureBox异步加载图片
    [转]FusionCharts 3.1 破解版 – 非常好用的Flash图表控件
    配合JavaScript拖动页面中控件
    在ThinkPad T400上安装win2003 所遇问题
    C# 抛弃MoveTo来实现文件重命名
  • 原文地址:https://www.cnblogs.com/Agoni-7/p/11048098.html
Copyright © 2020-2023  润新知