python(函数)

python 函数由关键字“def“定义

格式:

def 函数名(参数):
    '''对函数的解释,编程规范'''
    函数体

函数的内存存储

先看一下变量在内存中的存储,函数和其差不多

当解释器读取到“x = 1”时就会在内存中开辟一部分空间,该空间的起始地址存放的是“变量名 x ”,后面存放的是 “x” 的具体内容。解释 y=4 也是同样的道理

对函数的解释也是这样的

解释器一定要在读取了  ‘def  ...’  这个语句后才会执行内存的分配,所以函数的调用应该放在被解释之后。

函数的调用

"()"是函数的调用符,"函数名()",即表示调用一个函数

example:

def test_1():
    print("hello ,test_1!")
test_1()  #调用函数

函数返回值

返回值由关键字"return"返回

1.如果函数没有定义返回值默认返回"None"

1 def test_1():
2     print("hello ,test_1!")
3 print(test_1())  #返回None

2.如果函数有一个返回值,则返回该值

1 def test_1():
2     print("hello ,test_1!")
3     return 1
4 print(test_1())  #返回 1

3.如果函数有多个返回值,则返回一个元组

1 def test_1():
2     print("hello ,test_1!")
3     return 1,22,'dsada',2343
4 print(test_1())  #返回(1, 22, 'dsada', 2343)

参数:有位置参数,关键字参数,默认参数,和参数组

位置参数:

传入的实参必须和形参一一对应,多一个或少一个都不行

example:

1 def test_2(arg1,arg2,arg3):
2     print('arg1=%s arg2=%s arg=%s' %(arg1,arg2,arg3))
3 test_2(5,2,0)   #函数调用结果“arg1=5 arg2=2 arg=0”

关键字参数:

关键字参数可以不按照顺序传入,但必须为每一个形参通过“key = value” 的方式传入实参

example:

1 def test_2(arg1,arg2,arg3):
2     print('arg1=%s arg2=%s arg=%s' %(arg3,arg1,arg2))
3 test_2(arg3=5,arg1=2,arg2=0)  #执行结果 “arg1=5 arg2=2 arg=0”

默认参数:

函数定义是可以设置默认参数,当一个形参没有实参传入时就会使用该默认参数,默认参数采用从右向左的设置方式 “param1,param2=6,param3=1”是可以的

但“param1,param2=6,param3”是不可以的因为,param3没有值二param2却有值

example:

1 def test_2(arg1=0,arg2=2,arg3=5):
2     print('arg1=%s arg2=%s arg=%s' %(arg3,arg2,arg1))
3 test_2()  #执行结果 “arg1=5 arg2=2 arg=0”

参数组:

当不知道有多少个参数要传入函数时,可以采用参数组的形式

example:

1 def test_3(*args,**kwargs):   #*args接受数目不定的位置参数,**kwargs就收数目不定的关键字参数
2     print('*arg:',args)      #打印一个元组
3     print('**kwargs:%s' % kwargs)  #打印一个字典
4 test_3(1,1,1,'handsome',name='joker',age=18,face='handsome')

PS:位置参数和关键字参数混用时,关键字参数要在在位置参数的后面

局部变量全局变量

全局变量:

定义在程序开头的变量

局部变量

定义在函数体里的变量,当函数被调用时才会在内存中为其开辟空间

当函数被调用时,函数可以通过一些操作改变全局变量的值,这个全局变量是:列表,字典,集合,类。而字符串,数字,元组是不可以被函数修改的。除非加上关键字global。这个方法不推荐使用。

猜你喜欢

转载自www.cnblogs.com/planBinary/p/11728349.html