python编程

python基础--函数的参数&函数注释

2017-12-01  本文已影响0人  Cassie测试路

python函数

a = type             # 变量a指向type函数
a(1)                    # <class 'int'> ,所以也可以通过a调用type函数
callable(type)     # True

函数返回多个值

def test():
    return 1,2

test()   # (1,2) 返回元组

常用内置函数

isinstance(1, int)          # True
isinstance(1, (int, str))    # True,相当于isinstance(1, int) or isinstance(1, str)

函数的参数

def test(a, b):
    print(a, b)

test(1, 2)      # 输出:1 2,直接按顺序传递位置参数
test(b=2, a=1)  # 输出:1 2,根据形参的名字来传递参数,可以不按顺序
test(a=1, 3)    # 报错:位置参数必须第一

定义默认参数

def add_end(L=[]):
    L.append('END')
    return L

add_end()    # 第一次默认参数调用返回:['END']
add_end()    # 第二次默认参数调用返回:['END', 'END']
add_end()    # 第三次默认参数调用返回:['END', 'END', 'END']

可变参数和关键字参数

  1. 可变参数*args:可变参数允许传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple传给形参。
# 所有条件都是True才返回True(a&b&c&...),用于解决需要多个skip条件
def is_all_true(a, *args)->bool:
    result = bool(a)
    for n in args:
        result = result & bool(n)
    return result

is_all_true(True, 1)
  1. 关键字参数**kwargs:关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict传给形参。
def test(a, **kwargs):
    print(a, kwargs)

test(1)   # 1 {}
test(1, name="a", age=28)   # 1 {name="a", age=28}
  1. 命名关键字参数keyword-only:python3引入,定义的时候是位置参数但是调用的时候必须使用关键字参数传参。命名的关键字参数是为了限制调用者可以传入的参数名
def test1(a, *, x, y):  # x,y都变成keyword-only参数
    print(a, x, y)

test1(1)   # 报错  missing 2 required keyword-only argument
test1(1, x=1, y=2)   # 返回:1 1 2


def test2(*args, x, **kwargs):      # x 即keyword-only参数
    print(args, x,kwargs)

test2(1,2, x=3)    # 返回: (1,2) 3 {}

参数组合

def test(a, b=None, *args, **kw):
     print(a,'--',b,'--',args,'--',kw)


test(1, "cc")             # 1 -- cc -- () -- {}
test(1, "cc", "cc")     # 1 -- cc -- ('cc',)
test(1, b="cc")          # 1 -- cc -- () -- {},b="cc"会传递给默认参数b而不是kw
test(1, c="cc")           # 1 -- None -- () -- {'c': 'cc'}
test(1, b="cc", c="cc")     # 1--cc--()--{'c': 'cc'}
test(1, b="cc", "cc")    # 报错:SyntaxError: positional argument follows keyword argument
test(1, "cc", "cc")         # 1 -- cc -- ('cc',) -- {}
test(1, "cc", c="cc")      # 1--cc--()--{'c': 'cc'}

python不需要函数重载

函数注释

函数注释:python3新增特性,定义函数的时候可以为函数添加参数注释和返回值注释。

  1. 参数注释: type类型/str类型/dict类型,格式:func(参数: 参数注解)
  2. 返回值注释: type类型/str类型/dict类型,格式: func()->返回值注解:
def sum(a: int, b: dict(type=int, help='arg b', c: 'arg c'))->int:
    return a+b

# 参数a的注解值类型为 type , b 为 dict, c 为 str
sum.__annotations__   
# {'a': <class 'int'>, b: {'type': <class 'int'>, 'help': 'arg b'}, 'c': 'arg c', 'return': <class 'int'>}
def sum(a: dict(type=int), b: int)->dict(type=dict, help='return value'):
    sum.__annotations__['a']['help'] = 'arg a'   # 调用函数时,动态增加参数a的注释
    return a+b

sum(1, 2)
print(sum.__annotations__['a'])  # {'type': <class 'int'>, 'help': 'arg a'}
上一篇 下一篇

猜你喜欢

热点阅读