**
函数
**
举些你可能已经使用过的函数例子:
判断数据类型:type(str)
字符串类型数据转为整数型:int(str)
…
通过观察规律不难发现,Python 中所谓的使用函数就是把你要处理的对象放到一个名字后面的括号就可以了。简单的来说,函数就是这么使用,可以往里面塞东西得到处理结果。这样的函数在 Python 中还有这些:
以 Python3.5 版本为例,一个有 68 个这样的函数,它们被称为内建函数。这里內建的是指这些函数为安装好了 Python 就可以使用。
1 函数格式
定义函数的格式:
其中,def 和 return 为关键字。
注意: 函数缩进后面的语句被称为是语句块,缩进是为了表名语句的逻辑与从属关系。缩进这个问题不能忽视,否则会导致代码无法成功运行,这里需要特别注意。
2 函数参数
③不定长参数
有时我们在设计函数接口的时候,可会需要可变长的参数。也就是说,我们事先无法确定传入的参数个数。
Python 提供了一种元组的方式来接受没有直接定义的参数。这种方式在参数前边加星号 * 。如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。例如:
def print_user_info( name , age , sex = ‘男’ , * hobby):
# 打印用户信息
print(‘昵称:{}’.format(name) , end = ’ ')
print(‘年龄:{}’.format(age) , end = ’ ')
print(‘性别:{}’.format(sex) ,end = ’ ’ )
print(‘爱好:{}’.format(hobby))
return;
# 调用 print_user_info 函数
print_user_info( ‘小明’ , 25, ‘男’, ‘打篮球’,‘打羽毛球’,‘跑步’)
输出的结果:
昵称:小明 年龄:25 性别:男 爱好:(
通过输出的结果可以知道,* hobby 是可变参数,且 hobby 其实就是一个 tuple (元祖)。
可变长参数也支持关键参数,没有被定义的关键参数会被放到一个字典里。这种方式即是在参数前边加 **,更改上面的示例如下:
def print_user_info( name , age , sex = ‘男’ , ** hobby ):
# 打印用户信息
print(‘昵称:{}’.format(name) , end = ’ ')
print(‘年龄:{}’.format(age) , end = ’ ')
print(‘性别:{}’.format(sex) ,end = ’ ’ )
print(‘爱好:{}’.format(hobby))
return;
# 调用 print_user_info 函数
print_user_info( name = ‘小明’ , age = 25 , sex = ‘男’, hobby = (‘打篮球’,‘打羽毛球’,‘跑步’))
输出的结果:
昵称:小明 年龄:24 性别:男 爱好:{‘hobby’: (‘打篮球’, ‘打羽毛球’, ‘跑步’)}
通过对比上面的例子和这个例子,可以知道,* hobby 是可变参数,且 hobby 其实就是一个 tuple (元祖),** hobby是关键字参数,且 hobby 就是一个 dict (字典)。
④ 只接受关键字参数
关键字参数使用起来简单,不容易参数出错,那么有些时候,我们定义的函数希望某些参数强制使用关键字参数传递,这时候该怎么办呢?将强制关键字参数放到某个参数或者单个后面就能达到这种效果,比如:
def print_user_info( name , *, age, sex = ‘男’ ):
# 打印用户信息
print(‘昵称:{}’.format(name) , end = ’ ')
print(‘年龄:{}’.format(age) , end = ’ ')
print(‘性别:{}’.format(sex))
return;
# 调用 print_user_info 函数
print_user_info( name = ‘小明’ ,age = 25 , sex = ‘男’ )
# 这种写法会报错,因为 age ,sex 这两个参数强制使用关键字参数
#print_user_info( ‘小明’ , 25 , ‘男’ )
print_user_info(‘小明’,age=‘22’,sex=‘男’)
通过例子可以看,如果 age , sex 不适用关键字参数是会报错的。