zoukankan      html  css  js  c++  java
  • python-函数

    函数的意义

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
    函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。自己也可以创建函数,这被叫做用户自定义函数。

    函数的定义:

    • def 关键字开头,空格之后接函数的名称和圆括号,最后加上一个":".
    • def 是一个关键字,是不可以改变的。
    • 空格 是为了将关键字和函数名分开,一般的空1个空格。
    • 函数名:函数名只能包含字符串、下划线和数字其不能也数字开头,要有一定表达函数的功能。
    • 括号是必须加。
    • 一般还会给函数的参数进行相应的说明,应该写在函数的下面的第一行,增强代码的可读性。

    函数的调用:
    函数的调用就是函数加上():fun()

    函数的返回值

    函数的返回值:分别是没有返回值、返回一个值、返回多个值,也关键字return [返回对象]

    没有返回值

    1.
    def func():  # 函数的定义
        s = "abc"
        for i in s:
            print(i * 2)  # 打印
    ret = func()
    print(ret)  # None  没有返回值则为None
    
    2.
    def func():  # 函数的定义
        s = "abc"
        for i in s:
            print(i * 2)  # 打印
    
        return    # 加上一个return 没有加上任何对象
    
    ret = func()
    
    print(ret)  # 返回的还是None
    
    

    当函数中遇见return 则就结束函数体

    def test():
        print("aaa")  
        return   # 程序执行到这里,就结束,后面的代码将不执行
        print("bbb")  
    
    test()  # aaa
    

    一个返回值

    def test():
        b = 20
        c = 30
        a,b= b,c
    
        return a  # 返回参数a
    t = test()
    print(t)  # 20
    

    多个返回值

    返回多个值是也元组的形式进行返回

    def test():
        b = 20
        c = 30
        a, b = b, c
    
        return a, b, c
    
    
    t = test()
    print(t)  # (20, 30, 30)
    
    

    1.遇到return,此函数结束,return后面的东西将不会在执行
    2.return 返回值

     关于返回值:

     如果return什么都不写或者干脆就没写return,返回的结果就是None

     如果return后面写了一个值,返回给调用者这个值

     如果return后面写了多个结果,,返回给调用者一个tuple(元祖),调用者可以直接使用解构获取多个变量

    函数的参数

    在函数调用的时候具体指定的值,就是参数:

    def 函数(参数):
    	函数体
    

    测试:

    def test(x):
        print("传递的参数是{}".format(x))
    
    test(12)  # 传递的参数是12
    

    参数

    参数可以分为:

    • 形式参数 在函数声明的位置的变量叫形式参数 def func(a) a就是形式参数
    • 实际参数 在函数调用的时候给函数传递的值。fun("test") "test"就是实际参数
    • 传递参数 给函数传递信息的时候将实际的参数传给形式参数的过程叫做传参。

    参数的分类

    实参的角度

    位置参数
    def max_(x, y):
        return x if x > y else y
    
    
    ret = max_(12, 23)  # 按照位置进行传参数
    print(ret)  # 23
    
    关键字参数
    def max_(x, y):
        return x if x > y else y
    
    
    ret = max_(x=12, y=23)  # 关键字进行传递参数
    print(ret)  # 23
    
    混合参数
    def max_(x, y):
        return x if x > y else y
    
    
    ret = max_(12, y=23)  # 位置参数和关键字参数混合在一起使用
    print(ret)  # 23
    

    注意:位置参数必须在关键字参数的前面,对于一个形参只能赋值一次

    形参的角度

    1.按照位置传值:位置参数。
    def max_(x, y):
        return x if x > y else y
    
    
    ret = max_(12, 23)  
    print(ret)  # 23
    
    如果不传递参数
    def max_(x, y):
        return x if x > y else y
    
    
    ret = max_() # TypeError: max_() missing 2 required positional arguments: 'x' and 'y'
    print(ret
    
    2.将变化比较小的值设置成默认数值:默认参数。
    def max_(x, y = 20):  # y = 20 默认参数
        return x if x > y else y
    
    
    ret = max_(10)
    print(ret)  # 20
    ret1 = max_(10, 30)
    print(ret1)  # 30
    
    默认参数如果是一个可变的数据类型
    def append_(l, li=[]):
    
        li.append(l)
        print(li)
    
    append_(2)
    append_(3)
    append_(4)
    append_("abcd")
    append_([45,45])  # [2, 3, 4, 'abcd', [45, 45]]
    
    
    
    3.可接收所有的位置参数与关键字参数:动态参数。
    def test(*args, **kwargs):
        print(args)
        print(kwargs)
    
    
    test(1,2,3,4,"abdas", False, True, (78, "abc"), name ="Yang", age = 78)  # 
    # (1, 2, 3, 4, 'abdas', False, True, (78, 'abc'))
    # {'name': 'Yang', 'age': 78}
    

    关于*args和**kwargs中打散和聚合的问题

    def test1(a, b, d=0, *args, c=1, **kwargs):  # 将数据放在*args之前,关键字参数会被替换
        print(a, b, c, args, kwargs, d)   # 将数据放在**kwargs之前,关键字参数是默认参数
        # 1 2 1 (5, 6) {'r': 2, 'y': 78} 3
        print(*args)  # 元组打散  5 6
        print(*kwargs)  # 打散 返回key  r y
    test1(1, 2, 3, 5, 6, r=2, y=78)
    ********************************************************************
    dic = {"a": "b"}
    
    def test(**kwargs):
        print(kwargs)  # {"a": "b"}
        print(*kwargs)  # "a"
    
    test(**dic)  # a=b
    

    li = [1, 3, 2]
    def test(*args):  #
        print(args)  # args:(1, 3, 2)
        print(*args)  # args:1 3 2
    
    test(*li)  # 1 3 2
    

    偏函数

    固定函数中的一些参数,返回一个新的函数

    rom functools import partial
    
    def three_num_add(a, b, c):
        """
        三个数字相加
        :return: int
        """
        return a + b + c
    
    
    new_func = partial(three_num_add, c=10)  # 将c的参数进行保存
    
    ret = new_func(10, 20)  # 在新的函数中传入a,b参数
    print(ret)  # 40
    
  • 相关阅读:
    2019.10.11CSS
    2019.10.11 THML
    虚拟机FAQ
    thinkpad安装虚拟机 开启虚拟功能要在bios的security里面设置
    JDK在windows系统下环境变量的设置
    有关operamasks-ui的一些信息汇总
    从用List给ArrayList赋值看容器的传值,最好用.addAll
    给eclipse安装svn插件
    Java接口 枚举型Enumeration
    linux下的grep命令
  • 原文地址:https://www.cnblogs.com/yangchangjie150330/p/10523896.html
Copyright © 2011-2022 走看看