• 函数和其参数


    函数:
    函数:对功能的封装
    语法:
    def 函数名(形参):
    函数体
    函数名(实参)

    函数名:命名规则和变量一样

    函数的返回值:
    return, 函数执行完毕. 不会执行后面逻辑
    1. 如果函数中不写return返回None
    2. 只写return 返回None
    3. return 返回值. 返回一个值
    4. return 值1, 值2,... 返回多个值. 调用方接收到的是元组
    参数:
    在函数执行的时候给函数传递的信息
    1. 形参:
    1. 位置参数.
    2. 默认值参数. 当调用的时候不给传值使用默认值
    3. 混合使用. 顺序: 1. 位置参数, 2, 默认值参数
    2. 实参:
    1.位置参数. 按照位置给形参赋值
    2. 关键字参数. 按照名称给形参赋值
    3. 混合参数. 先用位置参数, 再用关键字参数
            
    # def yue(fangshi, age):   # 形参
    #     print("打开手机")
    #     print("打开%s" % fangshi)
    #     print("找一个漂亮的妹子")
    #     print("年龄最好是%s" % age)
    #     print("出来约一约")
    #
    # yue("微信")
    # yue("探探", 38)
    # yue("陌陌", 26)
    
    # def fn(a,b,c):
    #     print(a)
    #     print(b)
    #     print(c)
    #
    # fn(1, 2, 3)
    # fn(b=3, a=2, c=1)  # 在实参调用的时候 . 可以指定参数的值是多少. 关键字(形参)参数
    
    
    # def gn(name, age, address, id, sex, hobby):
    #     print("人的名字叫%s, 年龄:%s, 地址:%s, id是:%s, 性别:%s, 爱好是:%s" % (name, age, address, id, sex, hobby))
    # gn("太白", 58, "保定", 1, "不详", "女")    # 位置参数
    # gn(id=1, name="太白", address="保定", hobby="女", age=58, sex="不详")  # 关键字(形参)参数
    # gn("太白", 58, "保定", id="3", sex="女", hobby="不详")
    
    def regist(id, name, sex=""):
        print("录入学生信息:id是%s, 名字是%s, 性别是:%s" % (id, name, sex))
    
    regist(1, "大阳哥")
    regist(2, "徐卫星")
    regist(3, "毛尖妹妹", "")
    
    
    # 参数: 在函数执行的时候给函数传递的信息
    # 形参: 在函数声明的位置.声明出来变量
    # 实参: 在函数调用的时候. 实际你给函数传递的值 
    # 函数的参数个数是没有要求的 但是,在运行的时候. 形参和实参要匹配. 按照位置把实参赋值给形参
    # 参数的分类:
    #   站在实参的角度:
    #       1. 位置参数
    #       2. 关键字参数
    #       3. 混合参数, 注意顺序. 先写位置参数, 然后在写关键字参数. 否则会报错
    #   站在形参的角度:
    #       1. 位置参数
    #       2. 默认值参数
    #       3. 默认值参数和位置参数混合使用. 顺序: 先写位置参数. 然后在写默认值参数
    静态形参实参
    1. 动态参数
    位置参数的动态参数: *args
    def chi(good_food, bad_food,drink, ice, jiu):
        print("我要吃", good_food, bad_food)
    
    chi("盖浇饭", "辣条")
    
    位置参数 > *动态参数 > 默认值参数
    
    
    def chi( *food, a, b): # 可以传入任意的位置参数
        print("我要吃", food)  # 动态参数接收到的是tuple类型的数据
    
    chi("盖浇饭", "辣条", "面条")
    def func(a, b, c, *args, d = 5):
        print(a, b, c, d, args)
    
    func(1,2,3)
    func(1,2,3,4,5,6,7, d ="马大哈") #默认参数前面如果有动态位置参数,需要用关键字赋值
    
    def chi(*food):
        print("我要吃", food)
    
     写函数. 给函数传递任意个整数. 返回这些数的和
    def he(*n):
        sum = 0
        for e in n:
            sum += e
        return sum
    print(he(5))
    动态位置参数
        关键字参数的动态参数 : **kwargs
    动态接收关键字参数
     *位置参数
    **关键字参数
    def func(**food):   # **food动态接收关键字参数
        print(food) # 接收到的是字典
    
    func(good_food="盖浇饭", bad_food="辣条", drink="冰封")
    
    关键字参数一定在位置参数后面
    位置参数 > *args > 默认值 > **kwargs
    
    这个函数可以接收所有的参数(无敌的)
    def func(*args, **kwargs):
        print(args)
        print(kwargs)
    func(1, 2, 5, 6, name="taibai",age=18, sex="不详")
    
    把列表中的每一个元素作为参数, 传递给函数. 一次都传过去
    
    def func(*args, **kwargs):  # *表示聚合,所有的位置参数, 聚合成元组 **聚合成字典
        print(args)
        print(kwargs)
    
    
    # lst = ["马虎疼", "大洋哥", "小花生", "毛尖妹妹"]
    # func(*lst)  # 实参, 打散, 迭代产生的
    
    dic = {"name":"太白", "alex":"wuse"}
    func(**dic) # 把字典打散. 以key=value形式进行传参
    
    
    def func(a, b):
        """
        计算a+b的和, 返回一个数
        :param a: 第一个数
        :param b: 第二个数
        :return: 返回计算之后的和
        """
        return a + b
    动态关键字参数
        顺序:
    位置,*args,默认值,**kwargs
    在形参上*聚合, **聚合
    在实参上*打散, **打散
    2. 命名空间和作用域
    命名空间:
    1. 内置命名空间: python解释内部运行时的变量函数
    2. 全局命名空间: 我们在py文件中直接声明出来的变量,函数
    3. 局部命名空间: 在函数内部声明的变量和函数.
    作用域:
    1.全局作用域:内置+全局
    2.局部作用域:局部
    globals() 查看全局作用域中的名字
    locals() 查看当前作用域中的名字

    3. global和nonlocal
    global: 把全局变量拿到局部来用.
    nonlocal: 把离他最近的一层的变量拿过来.不会找全局

    def func():
        global a    # a 不再是局部变量. 是全局变量
        a = 30  # 把全局中的a重新赋值成30
        print(a)
    func()
    print(a)
    
    a = 10
    def func1():
    
        def func2():
            nonlocal a  # 找局部作用域中 离他最近的那个变量引入进来
            a = 20
            print(a)
        func2()
        print(a)
    func1()
    改变变量的作用域
  • 相关阅读:
    lightoj-1047
    lightoj-1044
    lightoj-1045
    lightoj-1082
    LeetCode偶尔一题 —— 19. 删除链表的倒数第N个节点
    Python 3.52官方文档翻译 http://usyiyi.cn/translate/python_352/library/index.html 必看!
    Python3 time模块
    JavaScript CSS 等前端推荐
    Python之 七级字典查询
    将Sublime Text 3设置为Python全栈开发环境(转一个链接)
  • 原文地址:https://www.cnblogs.com/luxiangyu111/p/9305508.html
Copyright © 2020-2023  润新知