zoukankan      html  css  js  c++  java
  • 函数

      

    # 函数是对功能或者动作的封装
    # 函数的定义:
    def yue():
        print("拿出手机")
        print("打开陌陌")
        print("找一找心怡的对方.")
        print("出来吃吃饭")
        print("唱唱歌")
        print("跳跳广场舞")
    
    # 函数的调用:  函数名()
    yue()
    print("回家休息休息")
    yue() # 动作就可以在任何时候, 在任何位置, 进行访问
    
    # 当函数执行之后。可以给调用者一个返回值
    def yue(): # 参数
        print("拿出手机")
        print("打开陌陌")
        print("找一找心怡的对方.")
        print("出来吃吃饭")
        print("唱唱歌")
        print("跳跳广场舞")
        return "小姐姐", "小护士", "广场舞大妈"
        # return "小姐姐"  # return表示返回。 这个函数在调用之后会得到一个结果
    ret = yue() # 当函数有返回值的时候。 我们可以不接受返回值
    print(ret)
    
    # 在函数中如果不写return 表示函数没有返回值。调用方接收到的是None
    # return 可以终止一个函数的运行
    # 在函数中写了return。 但是return后面不跟值, 表示函数没有返回值。 接受的是None。
    # 在函数中写return。 return后面跟一个值
    # 在函数中写return。 return 后面可以跟上多个值, 表示返回多个值。 接收方收到的是元组
    
    # 形参
    def yue(tools): # 在函数声明的位置。 给出来的参数叫形参。 形式上的一个参数. 用一个变量来表是
        print("拿出手机")
        print("打开%s" % tools)
        print("找一找心怡的对方.")
        print("出来吃吃饭")
        print("唱唱歌")
        print("跳跳广场舞")
    
    # 实参
    # 在函数调用的时候。把实参的值赋值给形参的过程叫传参
    yue("微信") # 在函数调用的地方给出的具体的值。 参数叫实参. 实际参数
    yue("陌陌")
    yue("探探")
    
    def chi(good_food, no_good_food, drink):
        print("我要吃",good_food, no_good_food, drink)
    
    # chi("大米饭", "冰峰", "炸鸡")
    # chi(drink="哇哈哈", no_good_food="薯条", good_food="盖浇饭")
    chi("小米饭", "辣条", drink="可乐")
    
    def regist(name,sex="男", age=18): # 语法上不允许
        print(name, age, sex)
    
    regist("刘", 22)
    regist("李", 27)
    regist("高", 18, "女")
    regist("李", 27)
    
    # 实参的分类:
    # 1. 位置参数. 按照位置。 给形参赋值
    # 2. 关键字参数. 按照形参的名字给参数赋值
    # 3. 混合参数, 位置参数必须放在前面。 关键字参数放后面
    # 
    # 形参的分类(3大类)
    # 1. 位置参数 按照位置来声明形参
    # 2. 默认值参数, 当给参数传递值的时候。 默认值不起作用, 不给值。 默认值起作用. 保证你至少有个值能用
    # 顺序: 位置参数必须放在前面。 默认值参数必须放在后面
    # 
    # 
    # 函数:对功能或者动作的封装
    # 登陆验证
    def login(username, password):
        if username == 'alex' and password == "123":
            return True
        else:
            return False
    
    # 使用场景
    name = input("请输入你的账号:")
    pws = input("请输入你的密码:")
    if login(name, pws):
        print("进入空间")
    else:
        print("用户名或密码错误, 请重新登陆!")
    
    # f(x) = x + 1
    # f(3) = 3 + 1 = 4
    def f(x):
        return x + 1
    print(f(2))
    
    s = "你好啊我叫塞利亚"
    print(len(s))
    
    def my_len(s):
        count = 0
        for el in s:
            count+=1
        return count
    print(my_len(s))
    

     

    def chi(*food): # * 表示的是不定参数. 可以传递任意个信息 参数名是food, 接受到的是元组
        print("我要吃", food)
    
    chi("一锅大米饭", "一箱辣条", "一桶方便面", "4L可乐")
    chi("方便面")
    chi("一大锅米饭", "一小锅小米饭", "一箱辣条", "一桶方便面", "4L可乐")
    
    # * 表接收位置参数的动态传参
    # 传参的顺序
    # 位置 *args 默认值 **kwargs
    # 
    # 如果默认值参数在*args前面. 如果想让默认值生效. *args将永远接不到值
    def func( a, b, *args,c = 5): # arguments参数
        print(a, b, c, args)
    
    func(1,2,3,4,5,6,8,c = 10)
    
    # 关键字的动态传参
    # *args 位置参数 接收到的是元组
    # **kwargs 关键字的动态传参, 接收到的是字典
    def func(**kwargs): # key word arguments
        print(kwargs)
    
    func(a=10, b=20, jay="周杰伦", jj="林俊杰")
    
    # 无敌模式. 所有的参数都能接收
    def func(*args, **kwargs):
        print(args)
        print(kwargs)
    
    func(1, 2, 5, jj="陶喆", jay="zhoujielun", soup="胡辣汤")
    
    def func(*args): # 在这里. 其实相当于把传进来的参数做了一次聚合, 聚合成一个元组
        print(args)
    
    lst = "娃哈哈"
    func(*lst) #  在实参位置 * 表示打散, 打散的是可迭代对象
    
    
    def func(**kwargs): # ** 把接收到的关键字参数打包(聚合)成字典
        print(kwargs) # 一定是字典
    
    dic = {"张无忌": "明教教主", "谢逊": "金毛狮王", "范瑶": "光明右使"}
    
    # func(张无忌=dic['张无忌'], 谢逊=dic['谢逊'], 范瑶=dic['范瑶'])
    func(**dic) # 这里的** 是把字典打散. 字典的key作为参数的名字, 字典的值作为参数的值传递给形参
    
    # 在形参上
    #   1. 位置参数
    #   2. 默认值参数
    #   3. 动态参数
    #       1. *args  位置参数的动态传参. 系统会自动的把所有的位置参数聚合成元组
    #       2. **kwargs  关键字的动态传参. 系统会自动把所有的关键字参数聚合成字典
    #       3.  def func(*args, **kwargs): 无敌传参
    #       4. 顺序:  位置参数, *args, 默认值, **kwargs
    #       5. 在使用的时候, 可以任意的进行搭配
    #   4. 在实参上. *, **表示的打散.  在形参. *,** 表示聚合
    

      

    # 最开始会开辟一个自己的命名空间- 内置名称空间
    a = 10
    print(a)
    # 直接在py文件一个层面上是全局名称空间
    def func():
        hasakey = 10
    # 在函数内部属于局部名称空间
    func()
    # 加载顺序: 内置 => 全局 => 局部
    # 取值顺序: 局部 => 全局 => 内置
    
    a = 10 # 全局
    def func():
        # a = 20
        print(a)
    
    func()
    
    # 作用域: 变量或者函数的声明周期
    # 全局作用域: 全局名称空间+内置名称空间
    # 局部作用域: 局部名称空间
    a = 10 # 全局
    def func():
        liuwei = "刘伟"
    
    # 1. globals() 查看全局作用域中的所有内容
    qiao = "乔峰"
    def 抗收音机():
        bgm = "难念的经"
        print("娃哈哈")
        print(locals())
    抗收音机()
    
    print(globals()) # 查看全局作用域中的内容
    print(locals()) # locals()查看的是当前作用域中的内容
    

      

    def func1():
        print("我是func1")
    
    def func2():
        print("我是func2")
        func1()
    
    def func3():
        func2()
        print("我是func3")
    func3()
    # 这样的代码不是嵌套. 互相调用
    # 
    # 函数可以互相嵌套
    def outer():
        def inner():
            print("我是内部")
        print("我是外部")
        inner()
    
    outer()
    
    def outer():
        print("我是外面的")
        def inner_1():
            def inner_2():
                print("我是里面的2")
            inner_2()
            print("我是里面的1")
        inner_1()
        print("我是外面的收尾")
    
    outer()
    
    a = 10
    def func():
        global a #表示在当前作用域中的使用的a是全局中的变量
        a = 20 # 所有的a都是外面的了
        print(a) # 现在只有看的权利
    
    print(a) # 10
    func() # 20
    print(a) # 20
    
    
    def outer():
        a = 10
        def inner():
            nonlocal a # 找的是局部当中, 离他最近的上层的那个变量
            a = 20
            print(a)
        print(a) # 10
        inner() # 20
        print(a) # 20
    outer()
    
    
    
    a = 1
    def fun_1():
        a = 2
        def fun_2():
            nonlocal a
            a = 3
            def fun_3():
                a = 4
                print(a)
            print(a)
            fun_3()
            print(a)
        print(a)
        fun_2()
        print(a)
    print(a)
    fun_1()
    print(a)
    
    # global 引入全局变量, 可以定义全局变量
    # nonlocal 引入局部中离他最近的外层变量
    
    def func():
        global a # 没有也得有. 自动帮你创建
        a = 20
    
    func()
    print(a)
    

      

     

  • 相关阅读:
    Form 中调用指定请求并给定默认参数
    OAF 汇总行的做法
    EBS 开发常用SQL
    EBS 中常用的配置文件及说明
    OAF 常见概念介绍
    OAF 多语言的实现
    OAF 个性化基础
    OAF 开发前置配置
    条款20 STL函数对象
    条款19 command 模式与好莱坞法则
  • 原文地址:https://www.cnblogs.com/PythonMrChu/p/9640886.html
Copyright © 2011-2022 走看看