1. 程式人生 > >python3 中方法各種引數和返回值

python3 中方法各種引數和返回值

# -*- coding:utf-8 -*-
# Author: Evan Mi

# 函式


def func1():
    print('in the func1')
    return 0

# 過程


def func2():
    print('in the func2')

"""
多個值用逗號分割後返回,會分裝到一個tuple中返回,
接收的時候,如果使用一個變數接收,那麼這個接收變數就是一個tuple型別的
如果接收的時候也用逗號分割多個值來接收,那麼可以分別對應返回tuple中的每一個值
"""


def func3():
    return 1, 'hello', ['alex', 'wupei'], {'name': 'alex'}

x = func1()
y = func2()
z = func3()  # 一個值接收,是一個tuple
q, w, e, r = func3()  # 用對應個數的值接收,每個變數對應tuple對應位置的值
print(x)
print(y)
print(z)

print("center".center(100, '*'))
print(q)
print(w)
print(e)
print(r)

print("center".center(100, '*'))

# 定義一個方法


def test(x_arg, y_arg):
    print(x_arg)
    print(y_arg)


test(1, 2)  # 位置引數呼叫
test(y_arg=3, x_arg=5)  # 關鍵字引數呼叫,直接給形式引數賦值


def test1(x_arg, y_arg, z_arg):
    print(x_arg)
    print(y_arg)
    print(z_arg)


#  關鍵字引數不能寫到位置引數之前
test1(1, z_arg=2, y_arg=3)


# 預設值引數
def test2(x_arg, y_arg=2):
    print(x_arg)
    print(y_arg)


print("center".center(100, '*'))
test2(1)
print("center".center(100, '*'))
test2(1, 3)
print("center".center(100, '*'))
test2(y_arg=5, x_arg=8)

"""
在*args 前面有引數(x, *args),那麼(1,2,3,4,5)正確,(x=1,2,3,4,5)正確,(2,3,4,5,x=1)錯誤,給x多次賦值了
在*args 後面有引數(*args,x,y)那麼x,y只能採用關鍵字賦值方式(1,2,3,4,5,x=6,y=8) 
"""


def test3(*args):
    print(args)


test3(1, 2, 3, 4, 5)
test3(*[1, 2, 3, 4, 5])
print("center".center(100, '*'))


def test4(x_arg, *args):
    print(x_arg)
    print(args)


test4(1, 2, 3, 4, 5)


def test5(**kwargs):
    print(kwargs)
    print(kwargs['name'])


test5(name='alex', age=8)
test5(**{'name': 'Evan', 'age': 8})


def test6(*args, xx):
    print(args)
    print(xx)

#  **kwargs 必須在最後
#   def test7(**kwargs,xx=3): 這樣定義是錯誤的


print("test6")
# test6(1, 2, 3, 4, 5999, xx=4)
"""
*args 接收位置引數,轉換為tuple
**kwargs 接收關鍵字引數,轉換為dict
位置引數不能寫在關鍵字引數的後面
"""


def tt(xx=1, *args, **kwargs):
    print(xx)
    print(args)
    print(kwargs)


def ttt(xx, **kwargs):
    print(xx)
    print(kwargs)


def tttt(*args, xx, **kwargs):
    print(args)
    print(xx)
    print(kwargs)

#  kwargs接收的關鍵字引數的名字不能和函式列表中已有的其他引數相同
#  tt(2, 3, 4, 5, name=100, age=199, xx=98)
# 出現了xx,優先賦值給引數列表中的xx,而不是在dict中加入關鍵字為xx的key-value對
# ttt(x=99, y=99, xx=43)

tttt(1,2,3,4,5,x=100,y=33,xx=8)