Day3 - [函数]
1.函数基本语法及特性
- 函数和过程区分
1 #函数 有返回值return 2 def func1(): 3 """testing1""" 4 print('in the func1') 5 return 0 6 7 #过程 无返回值 8 def func2(): 9 '''testing2''' 10 print('in the func2') 11 12 x=func1() 13 y=func2() 14 15 print('from func1 return is %s' %x) 16 print('from func2 return is %s' %y)
- 什么是函数?
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
特性:
- 减少重复代码
- 使程序变的可扩展
- 使程序变得易维护
语法定义:
1 #语法 2 def 函数名(参数1,参数2,参数3,...): 3 '''注释''' 4 函数体 5 return 返回的值 6 。。。。。。不管写多少语句都不会执行!!! 7 #函数名要能反映其意
1 def hello():#函数名 2 print("Hello, I'm nobody!") 3 4 hello() #调用函数
可以带参数:
1 #下面这段代码 2 a,b = 5,8 3 c = a**b 4 print(c) 5 6 7 #改成用函数写 8 def calc(x,y): #x,y为形参 9 res = x**y 10 return res #返回函数执行结果 11 12 c = calc(a,b) #结果赋值给c变量 ; a,b为实参,真实存在于内存中的参数;实参和形参必须一一对应。 13 print(c)
- 函数返回值
无return->None return 1个值->返回1个值 return 逗号分隔多个值->元组
什么时候该有返回值?
调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值
通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果
什么时候不需要有返回值?
调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值
通常无参函数不需要有返回值
- 参数
- 形参和实参
形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参,目的是在函数调用时接受实参(实参个数,类型应与实参一一对应)。
实参:实际参数,调用函数时传给函数的参数,可以是常量、变量、表达式、函数,传给形参。
区别:形参是虚拟的,不占用内存空间,形参变量只有在被调用时才分配内存单元,实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参。
2.位置参数和关键字(标准调用:实参与形参位置一一对应;关键字调用:位置无需固定)
扩展一下,如果位置参数和关键字都存在,那么关键字不能写在位置参数前面。
3.默认参数
def conn(host,port=3306): print(host,port) pass conn("168.1.2.1") #默认参数特点:调用函数的时候,默认参数非必须传递 port就是默认参数 #用途:1.默认安装值 # 2.数据连接端口
4.参数组
1 #*args:接受N个位置参数,转换成元组形式 2 # def test(*args): 3 # print(args) 4 # 5 # test(1,2,3,4,5,5) 6 # test(*[1,2,4,5,5])# args=tuple([1,2,3,4,5]) 7 8 # def test1(x,*args): 9 # print(x) 10 # print(args) 11 # 12 # test1(1,2,3,4,5,6,7) 13 14 15 #**kwargs:接受N个关键字参数,转换成字典的方式 16 # def test2(**kwargs): 17 # print(kwargs) 18 # print(kwargs['name']) 19 # print(kwargs['age']) 20 # print(kwargs['sex']) 21 # 22 # test2(name='alex',age=8,sex='F') 23 # test2(**{'name':'alex','age':8}) 24 # def test3(name,**kwargs): 25 # print(name) 26 # print(kwargs) 27 # 28 # test3('alex',age=18,sex='m') 29 30 # def test4(name,age=18,**kwargs): 31 # print(name) 32 # print(age) 33 # print(kwargs) 34 # 35 # test4('alex',age=34,sex='m',hobby='tesla')