标签:spl 传值 虚拟 开始 目的 基本语法 opened tuple 代码
1 def sayhi():#函数名 2 print("Hello, I‘m nobody!") 3 4 sayhi() #调用函数
可以带参数
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) #a、b是实参,结果赋值给c变量 13 print(c)
要想获取函数的执行结果,就可以用return语句把结果返回
注意:
def test01(): pass def test02(): return 0 def test03(): return 3,‘hello‘,[‘Amy‘,‘Bob‘],{‘name‘:‘Alex‘,‘age‘:21} t1=test01() t2=test02() t3=test03() print(‘from test01 return is [%s]:‘%type(t1),t1) print(‘from test02 return is [%s]:‘%type(t2),t2) print(‘from test03 return is [%s]:‘%type(t3),t3) # 输出: # from test01 return is [<class ‘NoneType‘>]: None # from test02 return is [<class ‘int‘>]: 0 # from test03 return is [<class ‘tuple‘>]: (3, ‘hello‘, [‘Amy‘, ‘Bob‘], {‘name‘: ‘Alex‘, ‘age‘: 21})
总结:
形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体时使用形参,目的是在函数调用时接收实参(实参个数、类型应与形参一一对应)。
实参:实际参数,调用函数时传给函数的参数,可以是常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
区别:形参是虚拟的,不占用内存空间,形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参。
正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。
def test(x,y): print(x) print(y) test(1,2) #位置参数:实参与形参位置一一对应 test(y=2,x=1) #关键字参数:与形参位置无关 test(1,y=2) #混用:关键字参数必须放在位置参数之后 #test(y=2,1) #报错
默认参数在调用时不指定,那就是默认值,指定了的话,就用你指定的值。
特点:调用函数时,默认参数非必须传递。
def test(x,y=2): print(x) print(y) test(1) #不指定默认参数 test(1,5) #指定默认参数
若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数
*args:接收 0-N 个位置参数,转换成元组形式
def test1(*args): print(args) test1(1,2,3,4,5,6) # 输出:(1, 2, 3, 4, 5, 6) test1(*[1,2,3,4,5,6]) # 同上 def test2(x,*args): print(x,args) test2(1,2,3,4,5,6) # 输出:1 (2, 3, 4, 5, 6) test2(1) # 输出:1 () ,后面这个()就是args,只是因为没传值,所以为空
**kwargs:接收 0-N 个关键字参数,转换成字典的形式
def test1(**kwargs): print(kwargs) test1(name=‘Alex‘,age=21,sex=‘M‘) # 输出:{‘name‘: ‘Alex‘, ‘age‘: 21, ‘sex‘: ‘M‘} test1(**{‘name‘:‘Alex‘,‘age‘:21,‘sex‘:‘M‘}) # 同上 test1() #输出:{} def test2(name,**kwargs): print(name,kwargs) test2(‘Alex‘,age=21,sex=‘M‘) # 输出:Alex {‘age‘: 21, ‘sex‘: ‘M‘} test2(‘Alex‘) # 输出:Alex {} def test3(name,age=21,**kwargs): print(name,age,kwargs) test3(‘Alex‘,sex=‘M‘,hobby=‘singing‘,age=18) # 输出:Alex 18 {‘sex‘: ‘M‘, ‘hobby‘: ‘singing‘}
#像字符串,数字等类型的变量不可以在局部修改其值 name = "Alex" def change_name(name): print("before change:", name) # Alex name = "alex" print("after change", name) # alex change_name(name) print( name) # Alex #像列表、字典、集合、类等类型的变量可以在局部修改 names=[‘Amy‘,‘Bob‘,‘Cindy‘] def change_name(names): print("before change:", names) # [‘Amy‘, ‘Bob‘, ‘Cindy‘] names[0] = "Alex" print("after change", names) # [‘Alex‘, ‘Bob‘, ‘Cindy‘] change_name(names) print( names) # [‘Alex‘, ‘Bob‘, ‘Cindy‘]
Python3学习之路~3.1 函数基本语法及特性、返回值、参数、局部与全局变量
标签:spl 传值 虚拟 开始 目的 基本语法 opened tuple 代码
原文地址:https://www.cnblogs.com/zhengna/p/9198733.html