函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字。
函数定义语法如下
def 函数名(参数列表): #可以没有参数
函数体
函数调用
函数名(实参) #实参可以有多个
把函数中的一个局部变量强制声明为全局变量
global 变量名
向函数传递元组和字典
>>> t=('xiaoming',15)
>>> d={'name':'xiaoming','age':15}
def f(name='xiaoming',age=30)
print("name: %s" % name)
print("age: %s" % age)
>>> f('xiaoming',15)
name=xiaoming
age=15
>>> f(name='xiaoming',age=15)
name=xiaoming
age=15
>>> f(*t)
name=xiaoming
age=15
>>> f(**d)
name=xiaoming
age=15
一般当用户向函数传入的实参个数大于形参的个数的时候就会报传入多值错误,为使函数兼容性更强,Python中针对传入多值的情况有专门的处理机制。如下面的例子:
>>> def f(x,*args,**kwargs):
... print(x)
... print(args)
... print(kwargs)
...
>>> f(1)
1
()
{}
>>> f(1,2,3)
1
(2, 3)
{}
>>> f(1,2,3,4,y=3)
1
(2, 3, 4)
{'y': 3}
说明:元组数据被*args接收,字典数据被**kwargs接收
lambda 函数是一种快速定义单行的最小函数,是从Lisp借用来的,可以用在任何需要函数的地方。
lambda 表达式格式
lambda 语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边是返回值。
lambda 语句构建的 其实是一个函数对象
例子如下:
>>> def f(x,y):
... return x*y
...
>>> f(2,3)
6
>>> g=lambda x,y:x*y
>>> g(2,3)
6
lambda表达式的作用:
1. 使用Python 写一些执行脚本时,使用lambda 可以省去定义函数的过程,让代码更加精简。
2. 对于一些抽象的,在别的地方不会再复用的函数,有时候给函数起个名字也是难题,使用lambda 不需要考虑命名的问题。
3. 使用lambda在某些时候让代码更容易理解。
Python 中没有switch 语法结构,但是可以通过字典来实现switch 实现的功能 。
创建 divis.py.py 如下代码所示:
from __future__ import division
def jia(x,y):
return x+y
def jian(x,y):
return x-y
def cheng(x,y):
return x*y
def chu(x,y):
return x/y
operator = {"+":jia,"-":jian,"*":cheng,"/":chu}
def f(x,o,y):
print(operator.get(o)(x,y))
f(3,"+",2)
运行结果:5
在这里 print(operator.get(o)(x,y)) 相当于先把jia 取出来,然后看作是 jia 的函数,再把x,y 实参传入进去,最终通过函数计算出结果。如果为兼容冗余参数的情况,可以使用上面的传值冗余的解决办法:
print(operator.get(o)(x,y,*args,**kwargs))
以上的实现方法可以简化成如下形式:
#-*- coding:UTF-8 -*-
#使用字典实现switch 语句
from __future__ import division
x=1
y=2
operator="/"
result={
"+":x+y,
"-":x-y,
"*":x*y,
"/":x/y
}
print(result.get(operator))
类型转化内置函数
- type()
- int()
- long()
- float()
- complex() 转化成一个复数
- tuple()
- str()
- list()
- hex() 把数转成16进制
- oct() 把数转成8进制
- chr() 返回一个数字的Unicode 编码,数字最大值为
1,114,111
- ord() 返回单个字符的Unicode 编码
string 函数
- str.capitalize() 用于把字符串首字母转换为大写,返回一个新的字符串,原来的字符串并没有变
- str.replace() 替换字符串中的一个字符或多个字符,同样返回的是一个新字符串,原字符串并没有被改变。
- str.split() 用于切割字符串
例:
ss='rqer34q45q411111'
>>> ss.capitalize()
'Rqer34q45q411111'
ss.replace('1','x')
'rqer34q45q4xxxxx'
>>> ip='192.168.1.11'
>>> ip.split('.')
['192', '168', '1', '11']
首先特别注意的是Python函数的参数与其他语言一个最大的不同点是参数在定义的时候不需要定义参数类型,这也是Python 函数灵活的一部分,这样只要传入的参数Python能够解析,得到你期望的结果,当我们需求发生变化,传入参数的类型发生了变化,但函数本身并不需要修改,只有当函数实在无法满足需求的时候才需要修改。
1. Python 函数和其他语言的函数一样,可以没有参数
2. 必需参数:和其他语言一样,有些函数在调用的时候要求必须要传入几个参数,这样的参数一般在函数定义的最前面,传入的时候按照顺序传入,如果不按顺序传入一定要指明参数名称和参数的值
3. 关键字参数 关键字参数只是一种传参的方式,就是在传参的时候指明参数与其相对应的值,必需参数也可以以关键字参数的形式进行传参
4. 带有默认值的参数 有些参数不总是需要给定一个值,这样的参数我们最好给它一个默认值,这样需要传入值的时候我们再以关键字参数的形式进行传参 ,不需要传参的时候因为其有默认值,所以就不用传参了
5. 可变长度的参数,通俗地讲就是传入的实参个数多于形参个数如何处理的问题,Python 对于这样的场景做了兼容处理,如下代码所示,就是如果传入的多余的参数不是键值对的形式那么就用*args接收,如果传入的多余参数是键值对的那么就用**kwargs接收。
>>> def f(x,*args,**kwargs):
... print(x)
... print(args)
... print(kwargs)
...
>>> f(1)
1
()
{}
>>> f(1,2,3)
1
(2, 3)
{}
>>> f(1,2,3,4,y=3)
1
(2, 3, 4)
{'y': 3}
说明:元组数据被*args接收,字典数据被**kwargs接收