Skip to content

Latest commit

 

History

History
262 lines (187 loc) · 4.74 KB

32.python函数的特性.md

File metadata and controls

262 lines (187 loc) · 4.74 KB

python函数的特性

一.函数之间共享数据

函数之间共享数据的方法如下:

1.使用全局变量

demo:

g_num = 0


def test1():
    global g_num
    # 将处理结果存储到全局变量g_num中
    g_num = 100


def test2():
    # 通过获取全局变量g_num的值,从而获得test1函数处理之后的结果
    print(g_num)


# 1.先调用test1得到数据保存到全局变量中
test1()
# 2.在调用test2,处理test1函数执行之后的这个值
test2()

运行结果:

100

函数之间共享变量可以使用全局变量作为媒介来存储和转发数据从而达到共享数据的结果

2.使用函数的返回值、参数

demo:

def test1():
    # 通过return将一个数据结果返回
    return 50


def test2(num):
    # 通过形参的方式保存传递过来的数据,就可以处理了
    print(num)


# 1. 先调用test1得到数据并且存到变量result中
result = test1()

# 2. 调用test2时,将result的值传递到test2中,从而让这个函数对其进行处理
test2(result)

运行结果:

50

3.函数嵌套调用

demo:

def test1():
    # 通过return将一个数据结果返回
    return 20


def test2():
    # 1. 先调用test1并且把结果返回来
    result = test1()
    # 2. 对result进行处理
    print(result)


# 调用test2时,完成所有的处理
test2()

运行结果:

20

二.函数的返回值(二)

1.返回多个值

关于return:

一个函数中可以有多个return语句,但是只要有一个return语句被执行到,那么这个函数就会结束了,因此后面的return没有什么用处

返回多值的方法:

return后面可以是元组,列表、字典等,只要是能够存储多个数据的类型,就可以一次性返回多个数据

注意:

return后面有多个数据,那么默认是元组

demo:

def divid(a, b):
    shang = a//b
    yushu = a%b 
    return shang, yushu  #默认是元组

result = divid(5, 2)
print(result)  # 输出(2, 1)

三.函数的参数(二)

1.缺省参数

结构:

def 函数名(参数名称=):  # 参数名称=值这种就是缺省参数
    代码

意义: 缺省参数就是形参中默认有值的参数

注意: 带有默认值的参数一定要位于参数列表的最后面

作用: 调用函数时,缺省参数的值如果没有传入,则取默认值。

demo:

def printinfo(name, age=35):
   # 打印任何传入的字符串
   print("name: %s" % name)
   print("age %d" % age)

# 调用printinfo函数
printinfo(name="miki")  # 在函数执行过程中 age去默认值35
printinfo(age=9 ,name="miki")

运行结果:

name: miki
age: 35
name: miki
age: 9

2.不定长参数

结构:

def 函数名([formal_args,] *args, **kwargs):  # *args, **kwargs就是不定长参数
   """函数_文档字符串"""
   代码
   return [expression]

意义: 有时可能需要一个函数能处理比当初声明时更多的参数, 这些参数叫做不定长参数,声明时不会命名。

注意:

加了星号(*)的变量args会存放所有未命名的变量参数,args为元组

而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典.

作用: 可以接受不定的数据

demo:

def func(a, b, *args, **kwargs):
    """可变参数演示示例"""
    print("a=%s" % a)
    print("b=%s" % b)
    print("args:", end="")
    print(args)
    print("kwargs:", end="")
    for key, value in kwargs.items():
        print("key=%s," % key, end="")
        print("value=%s" % value, end="\n")


# 注意参数对应
func(1, 2, 3, 4, 5, m=6, n=7, p=8)
print("---------------------------")

c = (3, 4, 5)
d = {"m": 6, "n": 7, "p": 8}
# 注意元组和字典的传参方式
func(1, 2, *c, **d)

print("---------------------------")
# 不加*比较
func(1, 2, c, d)

运行结果:

a=1
b=2
args:(3, 4, 5)
kwargs:key=m,value=6
key=n,value=7
key=p,value=8
---------------------------
a=1
b=2
args:(3, 4, 5)
kwargs:key=m,value=6
key=n,value=7
key=p,value=8
---------------------------
a=1
b=2
args:((3, 4, 5), {'m': 6, 'n': 7, 'p': 8})
kwargs:

3.缺省参数在*args后

如果很多个值都是不定长参数,那么这种情况下,可以将缺省参数放到 *args的后面, 但如果有**kwargs的话,**kwargs必须是最后的

demo:

def sum_nums_3(a, *args, b=22, c=33, **kwargs):
    print(a)
    print(b)
    print(c)
    print(args)
    print(kwargs)


sum_nums_3(100, 200, 300, 400, 500, 600, 700, b=1, c=2, mm=800, nn=900)

运行结果:

100
1
2
(200, 300, 400, 500, 600, 700)
{'mm': 800, 'nn': 900}