python函数
一、python函数和shell中的函数性质一样。语法略有不同。
函数就是可以将一些命令封装起来,然后命名,我们可以通过调用函数名称来使用函数中的内容。
函数的优点:
1.减少代码的重复性。
2.便捷。
3.可扩展性强。
格式:
def 函数名():
执行命令
例子:
#!/usr/bin/env python
def abc():
print ('hello world')
abc()
二、return 值
特点:
1.返回一个值
2.执行了return后续的命令就不在执行 。
例子:
#!/usr/bin/env python
def abc():
print ('hello world')
return 'abc'
x = abc()
当我们将abc()函数赋值给一个变量x。abc函数依然会执行。
但是abc()函数不会将其内容赋值给x。x的值是空。只有我们用return返回一个值。x才会有值。
三、传参数
第一种传参数:位置参数调用
#!/usr/local/bin/python
def a(x,x1):
print (x,x1)
a(1,2)
a(2,1)
[root@a ~]# python a.py
1 2
2 1
解释:x,x1 我们叫做形参。
1,2这些值我们称为实参。
我们传值的时候,形参和实参的位置是对应的。实参的数量不能多也不能少于形参。否则会报错。
第二种传参数:关键字传参数。
#!/usr/local/bin/python
def a(x,x1):
print (x,x1)
a(x1=2,x=1)
我们使用这种方法传参的时候,与形参的顺序无关。
第三种:当传参数时,关键字传参和位置传参同时有的时候。
遵循原则就是:
所有位置参数必须在关键字参数前边。
1.例子1:
#!/usr/local/bin/python
def a(x,y):
print (x,y)
a(1,y=2)
这个例子结果是正确的。
满足了位置参数在关键字参数前边。也是按照实参和形参的位置对应的规则。
2.错误例子:
def a(x,y):
print (x,y)
a(y=2,1)
这样执行就报错了。虽然这样我们分别给x和y赋值了,但是位置参数没有在关键字参数前边。
3.错误例子2:
def a(x,y):
print (x,y)
a(2,x=1)
这样也会报错。虽然位置参数在关键字参数前边。但是2赋值给了x。后边又定义了一下x。所以报错。
四、默认参数
#!/usr/bin/env python
def a(x,y=2):
print (x,y)
a(1)
[root@a ~]# python a.py
1 2
我们在形参处直接给y赋值。如果调用函数时,没有赋值。y就是默认值2.如果赋值了y就是新赋值的数值了。
def a(x,y=2):
print (x,y)
a(1,3)
[root@a ~]# python a.py
1 3
作用:
比如连接数据库的函数,如果输入了端口或是密码。我们就接受,否则按照默认值执行。
五、参数组
前边提过,传参数的时候,实参的个数不能多于或少于实参的个数。或者说实参的个数不确定的时候。这时候我们就用到了参数组。
例子1:
def abc(*args): #定义了参数组。*代表args接受的参数个数不固定。
print (args)
abc(1,2,3,4,5) #传递了很多实参,个数不固定。
[root@a ~]# python a.py
(1, 2, 3, 4, 5)
例子2:
2.接收字典
def a(**kwargs):
print (kwargs)
a(x=1,y=2,z=3)
a(**{'name':'xiaoming','age':22})
a(x=1,y=2,z=3)
这种方式我们通过关键字传参数。**kwargs会自动将传递过来的"关键字"参数转变成字典。
a(**{'name':'xiaoming','age':22})
这种方式字典前边必须带**,否则会报错。