06.函数与模块

1、动态参数

*args

顾名思义,动态参数就是传入的参数的个数是动态的,可以是1个、2个到任意个,还可以是0个。在不需要的时候,你完全可以忽略动态函数,不用给它传递任何值。

Python的动态参数有两种,分别是*args**kwargs,这里面的关键是一个和两个星号的区别,而不是argskwargs在名字上的区别,实际上你可以使用*any**whatever的方式。但就如self一样,默认大家都使用*args**kwargs

注意:动态参数,必须放在所有的位置参数和默认参数后面!

def func(*args):
    for i in args:
        i += i
    return i

print(func(1,2,3))
#调用时将实参打包成一个元组的形式传入,参数为列表将列表作为一个参数传入,如果需要将列表中的元素一个一个传入调用函数时需要加*,例如a是列表,func(*a)就可将列表中的元素作为实参传入
#注意:调用时只能有一个参数加*,且只能放到最后面func(123, 'hello', ['a', 'b', 'c'], *{'name': 'kobe', 'age': 41})

 

 

**

将字典中的数据按照键值对的形式将value作为实际参数传给函数 

 

**kwargs

 

def fun(a, **kwargs):
    print "a is ", a
    print "We expect kwargs 'b' and 'c' in this function"
    print "b is ", kwargs['b']
    print "c is ", kwargs['c']

fun(1, b=3,c=5)

a
is 1 We expect kwargs 'b' and 'c' in this function b is 3 c is 5

2、用模块管理函数

#test1.py
def test():
    print('test1')
#test2.py
def test():
    print('test2')
#test3.py   在此py文件中引用test1.py和test2.py的函数方法

import test1 as t1
import test2 as t2

t1.test()
t2.test()

注意:

from test1 import test
from test2 import test

test()

#按此方法引用test函数,之后的会覆盖掉前面的,实际引用的是test2.py中的test函数

3、如果我们导入的模块除了定义函数之外还中有可以执行代码,那么Python解释器在导入这个模块时就会执行这些代码,事实上我们可能并不希望如此,因此如果我们在模块中编写了执行代码,最好是将这些执行代码放入如下所示的条件中,这样的话除非直接运行该模块,if条件下的这些代码是不会执行的,因为只有直接执行的模块的名字才是"__main__"。

#a.py

def foo():
    pass


def bar():
    pass

# __name__是Python中一个隐含的变量它代表了模块的名字
# 只有被Python解释器直接执行的模块的名字才是__main__
if __name__ == '__main__':
    print('call foo()')
    foo()
    print('call bar()')
    bar()
#b.py
import b 

#此返回结果并不会执行a.py中的可执行程序

4、练习题

posted @ 2021-01-20 15:00  刘华强等待瓜熟的日子  阅读(69)  评论(0编辑  收藏  举报