Python 函数
一、概念及作用
函数:是组织好的,可重复利用的,用来实现单一,或相关联功能的代码块。
作用:提高应用的模块性,和代码的重复利用率。、
二、python函数及创建
1.python中提供了许多内建函数
例:print()
dict()等
2.自定义函数【用户创建的函数】
规则:1.函数代码块以 def关键词开头,后接函数标识符名称和圆括号()。
2.任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
3.函数的第一行语句可以选择性地使用文档字符串---用于存放函数说明。
4.函数内容以冒号起始,并且缩进。
5.return【表达式】结束函数,选择性地返回一个值给调用方。
6.不带表达式的return相当于返回None。
语法:
def 函数标识名称(参数列表):
''' 函数_文档字符串,对函数进行说明 '''
函数体 (代码块)
return [表达式]
默认情况下,参数值和参数名称是按函数声名中定义的顺序匹配起来的。
示例代码:
''' 函数入门 ''' def print_me(my_name): '''输出用户昵称''' # 输出 print('你好,{0}'.format(my_name)) return None #脚本入口 if __name__ =='__main__': # 调用 print_me('张三') # ============================ 输出结果 你好,张三
关键字:
return
return语句 [表达式] 退出函数,选择性地想调用方返回一个表达式。
不带参数值的 return 语句返回None。
示例代码:
# 定义一个函数 def sum(num1,num2): # 返回两个参数之和 total = num1+num2 # 返回 return total # 调用函数 total = sum(10,20) print(total) # ========================== #结果 30
参数:
补充:
不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。
值传递:不可变类型中,在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身,称之为值传递
可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
址传递:可变类型中,如列表、字典, fun(la),则是将 la 真正传过去,修改后 fun 外部的 la 也会受到影响,称为址传递【引用传递】
示例代码:
不可变类型:
''' 不可变对象 值传递 ''' def fun(a): '''修改字符串值''' # 赋值 a = 'work' print('函数中修改后的结果:> {0}'.format(a)) # 调用函数 a = 'home' fun(a) print('函数外输出 a 的值:> {0}'.format(a)) # 结果 E:\python_VS_code>python e:/python_VS_code/directory[目录]/demo0806/py_01.py 函数中修改后的结果:> work 函数外输出 a 的值:> home
可变类型:
''' 可变对象 址传递 ''' def fun1(la): '''修改list列表中的元素''' la[0]='a' print('函数中修改的结果:> {0}'.format(la)) # 调用函数 la = ['A','B','C','D'] fun1(la) print('函数外输出 la :> {0}'.format(la)) # 结果 E:\python_VS_code>python e:/python_VS_code/directory[目录]/demo0806/py_01.py 函数中修改的结果:> ['a', 'B', 'C', 'D'] 函数外输出 la :> ['a', 'B', 'C', 'D']
正式参数类型:
- 必备参数
- 关键字参数
- 默认参数
- 不定长参数
> 必备参数:要以正确顺序传入函数,调用时数量必须和声明时的一样。
> 关键字参数:关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
> 默认参数:调用函数时,默认参数的值如果没有传入,则被认为是默认值。
默认参数在声明时要写入默认参数的参数值【例:a = ' 值 '】,默认值必须放在最后一个参数。
>不定长参数:可能需要一个函数能处理比当初声明时更多的参数。
这些参数叫做不定长参数 适用于当参数个数不确定或根据调用情况其参数个数会动态变化的情况。
1.*args:可以传入一个或多个参数,参数类型为元组。
语法:
def 函数名称(formal_args, *args ):
"函数_文档字符串"
函数体
return [表达式]
示例:
''' 不定长参数 *args ''' def fun(*info): '''获得员工数据信息''' print('员工姓名:{0}'.format(info[0])) print('专业技能:{0}'.format(info[1:])) return None # 调用函数 fun('li','python','c','java') # 结果 E:\python_VS_code>python e:/python_VS_code/directory[目录]/demo0806/py_02.py 员工姓名:li 专业技能:('python', 'c', 'java')
2.**kw:可以传入一个或多个参数,参数类型为字典。
语法:
def 函数名称(formal_args, **kw ):
"函数_文档字符串"
函数体
return [表达式]
示例:
''' 不定长参数 *kw ''' def fun(**info): '''获得数据''' print('员工姓名:{0}'.format(info['name'])) print('专业技能:{0}'.format(info['skills'])) return None # 调用函数 fun(name='li',skills='python,c,java') fun(**{'name':'li','skills':'python,c,java'}) # 结果 E:\python_VS_code>python e:/python_VS_code/directory[目录]/demo0806/py_02.py 员工姓名:li 专业技能:python,c,java 员工姓名:li 专业技能:python,c,java
总结:*argv 和 **kw的区别
两个参数必须为函数定义中参数列表中的排名最后的参数。
*argv 代表该参数位置可以放任意个数的数据,最终都会转换成 元组 数据类型在函数体内处理。
**kw 代表该参数位置可以放 k=v 格式的数据,最终都会转换成 字典 类型数据叜函数体内处理。