Python的学习笔记--函数

付威     2019-03-09   1658   4min  

函数的定义


python使用def来定义

def print_str(x):
    print (x)

调用print_str("12") 打印12

默认参数


python支持默认参数。

def print_str(x,y="end"):
    print (x,y)

调用print_str("12"),不传递y参数 打印12 end
调用print_str("12","continue") 打印12 continue

如果是多个默认参数,可以根据参数的名称来指定参数。

def print_str(x,y="y",z="z"):
    print ("x:",x)
    print ("y:",y)
    print ("z:",z)

当调用print_str(1,2),打印结果:

x: 1
y: 2
z: z

当调用print_str(1,z=2),打印结果:

x: 1
y: y
z: 2

使用默认参数需要注意一个问题:默认定义的时候,默认参数值已近计算出来,如果是一个默认参数是一个引用,则会发生改变。

def add_dict(arr=[]):
        arr.append("end")
        print (arr)
add_dict()
add_dict()
add_dict()

打印结果如下:

['none']
['none', 'none']
['none', 'none', 'none']

所以,如果使用可变的引用变量,则注意这种形式。可以使用None来代替:

def add_dict(arr=None):
    if arr is None:
        arr=[]

    arr.append("end")
    print (arr)

可变参数


python支持可变的个数的参数,在原来的参数上面增加一个*

def print_str(*x):
    print (x)
print_str(1,2,3,4)

打印结果如下:(1, 2, 3, 4)

可变参数在函数调用时自动组装为一个tuple

如果想把一个数组的元素当成默认参数传到方法里面,该如何操作?

def print_str(*x):
    print (x)

arr=[1,2,3,4]
print_str(arr)

打印结果:([1, 2, 3, 4],),这个是把arr当成一个list类型的参数传入到方法中,打印出来是一个tuple([],)类型。

所以在python允许list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:

def print_str(*x):
    print (x)

arr=[1,2,3,4]
print_str(*arr)

打印结果:(1, 2, 3, 4)

关键字参数


关键字参数是把默认参数当成一个dict的类型,使用方法是**,我们定义一个关键字参数:

def print_str(x,**arg):
    print (x,arg)
print_str(1)

打印结果是:1 {}

调用print_str(1,a=1,b=2,c=3),打印结果:1 {'a': 1, 'b': 2, 'c': 3}

同样如果想把一个dict类型的参数传递进来,也需要使用**

def print_str(x,**arg):
    print (x,arg)
dic={'a': 1, 'b': 2, 'c': 3}
print_str(1,**dic)

打印结果:1 {'a': 1, 'b': 2, 'c': 3}

注意: dic这个中参数传递是一种拷贝,在函数内部修改不会影响原来的值。

def print_str(x,**arg):
    arg["a"]=10
    print (x,arg)
dic={'a': 1, 'b': 2, 'c': 3}
print_str(1,**dic)
print(dic)

打印结果:

1 {'a': 10, 'b': 2, 'c': 3}
{'a': 1, 'b': 2, 'c': 3}
(本文完)

作者:付威

博客地址:http://blog.laofu.online

如果觉得对您有帮助,可以下方的RSS订阅,谢谢合作

如有任何知识产权、版权问题或理论错误,还请指正。

本文是付威的网络博客原创,自由转载-非商用-非衍生-保持署名,请遵循:创意共享3.0许可证

交流请加群113249828: 点击加群   或发我邮件 laofu_online@163.com

付威

获得最新的博主文章,请关注上方公众号