zoukankan      html  css  js  c++  java
  • Python随笔-函数

    • 在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
    def GetMax(v1, v2):#注意冒号
        if v1>v2:#注意冒号
            return v1
        else:#注意冒号
            return v2
            
    print(GetMax(1,2))
    • 如果想定义一个什么事也不做的空函数,可以用pass语句:
    >>> def fun():
        pass
    • pass还可以用在其他语句,比如:
    if age >= 18:
        pass
    • 调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError。但是如果参数类型不对,Python解释器就无法帮我们检查。
    • 函数可以返回多个值:例如把getMax改成返回最大值、两值的差。
    def GetMax(v1, v2):
        if not isinstance(v1, (int, float)):
            return;
            
        if not isinstance(v2, (int, float)):
            return;
            
        if v1>v2:
            return v1, v1-v2
        else:
            return v2, v2-v1

    如果用一个值去接收结果,原来返回值是一个tuple!但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。

    result = GetMax(1, 5)
    print(result)#(5, 4)
    max, interval = GetMax(1,5)
    print(max, interval)#5 4
    •  python的函数可以使用默认参数,例如:
    def power(a, b=2):
        if not isinstance(a, (int, float)):
            return;
            
        if not isinstance(b, int):
            return;
        
        idx = 1
        sum = a;
        while idx<b:
            sum = sum*a
            idx+=1
            
        return sum;

    需要注意的是,Python函数在定义的时候,默认参数的值就被计算出来了,需要避免重复使用了同一个对象。如下,因为设置的默认值是引用类型,导致所有的调动设置的默认值都指向了同一个对象。

    def SetName(map = {}):
        map["name"] = "test"
        return map
    
    map = SetName()
    print(map)        #{'name': 'test'}
    map.setdefault("age", 10)
    map["score"] = 99
    
    print(map)        #{'name': 'test', 'age': 10, 'score': 99}
    print(SetName())  #{'name': 'test', 'age': 10, 'score': 99}这里的默认值不是我们想要的{},而是之前return的那个map。
    •  可变参数
    def getSum(*numbers):
        sum = 0
        for v in numbers:
            sum += v
        return sum
    print(getSum(
    1, 2, 3)) print(getSum())
    #如果已经有一个list或者tuple,要调用一个可变参数怎么办
    #Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进
    list = [1, 2, 3]
    print(getSum(*list))
    
    t = (1, 2, 3)
    print(getSum(*t))
    •  关键字参数。

    可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

    def person(name, age, **kv):
        print('name:', name, 'age:', age, 'other:', kv)
    
    >>> person('Bob', 35, city='Beijing')
    name: Bob age: 35 other: {'city': 'Beijing'}
    >>> person('Adam', 45, gender='M', job='Engineer')
    name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
    • 命名关键字参数

    如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收cityjob作为关键字参数。这种方式定义的函数如下:

    def person(name, age, *, city, job):
        print(name, age, city, job)
        
    person("mical", 12, city="shenz", job="it")
    # person("mical", 12, city="shenz")
    # person("mical", 12, city="shenz", job="it", sex = "man")
    #确实或传多了都会报错

    如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

    def person(name, age, *args, city, job):
        print(name, age, args, city, job)
    
    person("mical", 12, 1, 2, 3, 4, city="shenz", job="it")

    关键字参数也可带默认值

    def person(name, age, *args, city, job = "it"):
        print(name, age, args, city, job)
    
    person("mical", 12, 1, 2, 3, 4, city="shenz")
  • 相关阅读:
    Balanced Binary Tree
    Swap Nodes in Pairs
    Reverse Nodes in k-Group
    Reverse Linked List II
    Remove Nth Node From End of List
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Partition List
    Merge Two Sorted Lists
    【Yii2.0】1.2 Apache检查配置文件语法
  • 原文地址:https://www.cnblogs.com/wrbxdj/p/9366515.html
Copyright © 2011-2022 走看看