• python笔记---day3


    函数

    定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,想要执行这个函数的时候,只需要调用函数名即可。

    特性

    1. 减少重复代码
    2. 使程序变得可扩展
    3. 使程序变得容易维护

    语法定义

    #定义
    def sayhi():
            print("Hello Word! I'm a coolboy !")
    
    #调用
    sayhi()
    sayhi()

    带参数:

    #定义
    def calc(x,y):
        res=x*y
        return res
    
    #调用使用
    c=calc(10,4)
    print(c)

     默认参数

    #默认参数
    def stu_refister(name,age,course,country="CN"):
        print("注册信息".center(20,'-'))
        print("姓名:", name)
        print("年龄:" ,age)
        print("国籍:", country)
        print("课程:", course)
    
    stu_refister("金角大王",34,'python')
    stu_refister("银角大王",14,'USA','linux')

    执行结果

    --------注册信息--------
    姓名: 金角大王
    年龄: 34
    国籍: CN
    课程: python
    --------注册信息--------
    姓名: 银角大王
    年龄: 14
    国籍: linux
    课程: USA

    我们在网站上注册用户,像国籍这种信息,你不填写,默认就会是 中国, 这就是通过默认参数实现的,把country变成默认参数非常简单。

    关键参数

    正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。像上面的默认参数就是一个关键参数。

    非固定参数

    若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数

    *args:  接收N个位置参数,转换成元祖形式

    def stu_register(name,age,*args):  # *args 会把多传入的参数变成一个元组形式
        print(name,age,args)
    
    
    执行:
    stu_register('张勇',23,'CN' ,'python')

    输出:
    张勇 23 ('CN', 'python')

    还可以有一个**kwargs

    # *kwargs 接收N个关键字参数,转换成字典的形式

    def test(**kwargs):
        print(kwargs)
    
    test(name='zhangyong',age='19',job='IT')
    
    执行结果:
    {'name': 'zhangyong', 'age': '19', 'job': 'IT'}
    
    
    固定参数结合
    def test(name,**kwargs):
        print(kwargs)
    
    test(name='zhangyong',age='19',job='IT')
    
    执行结果
    {'age': '19', 'job': 'IT'}
    
    另外一种写法:
    def test(**kwargs):
        print(kwargs)
    
    test(**{'name':'zhangyong','age':23,'job':'IT'})
    
    结果:
    {'name': 'zhangyong', 'age': 23, 'job': 'IT'}

    取字典其中的值

    def test(**kwargs):
        print(kwargs['name'])
        print(kwargs['age'])
    
    test(**{'name':'zhangyong','age':23,'job':'IT'})
    
    结果
    zhangyong
    23

    高阶函数

    高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。

     1. 参数为函数

    import time
    #定义第一个bar的函数
    def bar():
        print ("hello~~")
        time.sleep(3)
        print("In the bar")
    
    
    #定义第二个test的函数
    def test(func):
        func()
    print("In the test")
    #调用test函数,将bar作为一个实参传入到test。。test函数里面执行这个bar test(bar)

    代码的升级版:

    用test函数 计算bar函数 运行花费时间,不改变bar的源代码  和输出。

    import time
    def bar():
        print ("hello~~")
        time.sleep(3)
        print("In the bar")
    
    def test(func):
        start_time=time.time()
        func()
        stop_time=time.time()
        print("the bar run time is %s"%(stop_time - start_time))
    test(bar)

    2.返回值包含函数名

    def bar():
        time.sleep(3)
        print("in the bar")
    
    
    def test(func):
        print('增加一个功能')
        return func                  #返回test(bar)的内存地址, 有内存地址之后 可以随便赋值给其他变量调用
    
    
    bar=test(bar)    #从新覆盖一下bar的变量
    bar()

    #相当于实现了一个简单的装饰器,不改变源代码,不改变源代码的调用方式。 给源代码增加了一个新功能

         

  • 相关阅读:
    sublime 部分插件
    Error: EACCES: permission denied, mkdir '......node-sass/build'错误解决方案
    字符串
    数组
    MySQL5.7.26 忘记Root密码小计
    CentOS7安装MySQL8.0小计
    代替print输出的PY调试库:PySnooper
    聊聊数据库~5.SQL运维上篇
    'gbk' codec can't encode character 'xa0' in position 34: illegal multibyte sequence
    稍微记录下Django2.2使用MariaDB和MySQL遇到的坑
  • 原文地址:https://www.cnblogs.com/zyos/p/10076327.html
Copyright © 2020-2023  润新知