• python之函数


      函数是一个组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

    函数能提高应用的模块性,和代码的重复利用率。

    你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

    一、定义一个函数

    你可以定义一个有自己想要的功能的函数,以下是简单的规则:

    • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
    • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
    • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
    • 函数内容以冒号起始,并且缩进。
    • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
    def ChangeInt(a):
        a = 10
    b = 2
    ChangeInt(b)
    print(b) 
    def changeme(mylist):
        "修改传入的列表"
        mylist.append([1, 2, 3, 4])
        print("函数内取值: ", mylist)
        return
    
    # 调用changeme函数
    mylist = [10, 20, 30]
    changeme(mylist)
    print("函数外取值: ", mylist)
    def printme(str):
        "打印任何传入的字符串"
        print(str)
        return
    # 调用printme函数
    printme(str="My string")
    # 可写函数说明
    def printinfo(name, age):
        "打印任何传入的字符串"
        print("Name: ", name)
        print("Age ", age)
        return
    # 调用printinfo函数
    printinfo(age=50, name="miki");
    def printinfo(args,*vartuple):
        "打印任何传入的参数"
        print(args)
        for var in vartuple:
            print(var)
        return
    # 调用printinfo 函数
    printinfo(10)
    printinfo(70, 60, 50)

    二、实参和形参

    #定义函数括号里的一般叫形参
    #调用时括号里传递的参数一般叫实参
    #比如:
    def students(age):
        print('my age is %s' % age)
    
    students(18)
    
    age就是形参,18就是实参
    View Code

    三、参数的具体应用

    '''
    1、位置参数:按照从左到右的顺序定义的参数
            位置形参:必选参数
            位置实参:按照位置给形参传值
    '''
    def foo(x,y):
        print(x,y)
    foo(1,2)
    #结果:1,2
            
    '''
    2、关键字参数:按照key=value的形式定义的实参
            无需按照位置为形参传值
            注意的问题:
                    1. 关键字实参必须在位置实参右面
                    2. 对同一个形参不能重复传值
    '''
    def foo(x,y):
        print(x,y)
    foo(y=2,x=1)
    结果:1,2
    '''
    3、默认参数:形参在定义时就已经为其赋值
            可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参)
            注意的问题:
                    1. 只在定义时赋值一次
                    2. 默认参数的定义应该在位置形参右面
                    3. 默认参数通常应该定义成不可变类型
    '''
    def foo(x,y=2):
        print(x,y)
    foo(1)
    #结果:1,2
    foo(1,3)
    #结果:1,3
    
    '''
    4、可变长参数:
            可变长指的是实参值的个数不固定
            而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*argsh和**kwargs
    '''
    
    #*args:传递的参数会变成元组
    def foo(x,y,*args):
        print(x,y,args)
    foo(1,2,3)
    #结果:1 2 (3,)
    #**kwargs:传递的参数会变成字典
    
    def foo(x,y,**kwargs):
        print(x,y,kwargs)
    foo(1,2,a=3,b=4)
    #结果:1 2 {'a': 3, 'b': 4}
    
    函数参数的传递
    View Code

    四、return语句

    return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,下列变告诉你怎么做:

    # 可写函数说明
    def add_sum(arg1, arg2):
        # 返回2个参数的和."
        total = arg1 + arg2
        print("函数内 : ", total)
        return total
    
    # 调用sum函数
    total = add_sum(10, 20)
    return它是函数的执行结果的返回值,return往下的代码将不会执行(只能用在函数体内)
    return就是函数调用本身的结果
    return可以返回任意的数据类型
    Def func(a):
        print('this is test func')
        return0
        print('123')
    func(1)
    
    Def func(a):
        print('this is test func')
        If a==0:
            print('aaa')
            return0
        Elif a==1:
            print('bbb')
            return1
        Elif a==2:
            print('cccc')
            return2
        else:
            print('sb')
            return3
    func(0)
    func(1)
    func(2)
    func(3)

    五、函数的特性

    #函数可以被引用
    def f1():
        print('this is f1')
        return 'ok'
    res = f1()
    print(res)
    
    #函数可以当参数传递
    def foo(a):
        print(a)
    def bar(b):
        print(b)
    
    bar(foo('你好'))
    
    #嵌套函数
    def f1():
        def f2():
            def f3():
                print('this is f3')
            f3()
        f2()
    f1()
    
    函数的特性

    六、匿名函数

    info = {
        'li':2000,
        'zhao':35000,
        'wu': 25000,
        'du': 30000
    }
    
    #max
    print(max(info,key=lambda k: info[k]))
    
    #sorted
    print(sorted(info,key=lambda k: info[k],reverse=True))
    
    #map
    name = ['zhao', 'du', 'wu']
    res = map(lambda name: '%s_NB' % name,name)
    print(list(res))
    
    #filter
    name = ['zhao_NB', 'du_NB', 'wu']
    res = filter(lambda name: name.endswith('NB'),name)
    print(list(res))
    
    max,sorted,map,filter
  • 相关阅读:
    CV方向的高效阅读英文文献方法总结
    数据增强方法总结
    CNN结构演变总结(三)设计原则
    CNN结构演变总结(二)轻量化模型
    CNN结构演变总结(一)经典模型
    CNN可视化技术总结(四)--可视化工具与项目
    Codeforces972 D. Kuro and GCD and XOR and SUM 01Trie
    Codeforces 982 D. Shark
    Codeforces Round #700 (Div. 2) A~D题解
    codeforces 1004 D. Sonya and Matrix 构造
  • 原文地址:https://www.cnblogs.com/Amrice/p/10910519.html
Copyright © 2020-2023  润新知