python中def fun(a、b=200)_python 基础 函数
函數(shù)
什么是函數(shù)函數(shù)就是完成特定功能的一個(gè)語(yǔ)句組,這組語(yǔ)句可以作為一個(gè)單位使用,并且給它取一個(gè)名字。
可以通過函數(shù)名在程序的不同地方多次執(zhí)行(這通常叫做函數(shù)調(diào)用),卻不需要再所有地方重復(fù)編寫這些語(yǔ)句。
函數(shù)的分類-自定義函數(shù)(用戶自己編寫)
-預(yù)定義的python函數(shù)(系統(tǒng)自帶的一些函數(shù),還有一些第三方編寫的函數(shù),如其它程序員編寫的一些函數(shù),對(duì)于這些現(xiàn)成的函數(shù)用戶可以直接拿來(lái)使用)
函數(shù)的定義:
def 函數(shù)名 (函數(shù)列表)
#可以沒有參數(shù)
#函數(shù)名的定義和變量的定義是相同的
注意:
函數(shù)名是兩個(gè)以上單詞時(shí),第二個(gè)單詞的首字母需要大寫>>>?a?=?10
>>>?b?=?20
>>>?def?add():
...?????c=a+b
...?????print?c
...
>>>?add()
30
函數(shù)的調(diào)用#/usr/bin/python
def?fun():
if?True:
print?"kong"
print?"a"
if?True:
fun()
if?fun():
print?"ok"
[root@zabbix?tools]#?python?8.py
a
kong
kong
函數(shù)的參數(shù)
*形式參數(shù):
- 在定義函數(shù)時(shí)函數(shù)名后面圓括號(hào)中的變量名稱叫做”形式參數(shù)“,簡(jiǎn)稱:形參;#~/usr/bin/python
def?fun(x):???????????????????#x形參
print?x
s?=?raw_input("please?input?something")
fun(s)
[root@zabbix?tools]#?python?8.py
please?input?something100?????#100實(shí)參
100錯(cuò)誤傳參[root@zabbix?tools]#?python?8.py
please?input?somethingd
Traceback?(most?recent?call?last):
File?"8.py",?line?5,?in?
fun()
TypeError:?fun()?takes?exactly?1?argument?(0?given)
#類型錯(cuò)誤,fun()函數(shù)未傳參。#TypeError:?fun()?takes?exactly?1?argument?(2?given)
多個(gè)參數(shù)定義:#!/usr/bin/python
def?fun(a,b):
if?a?==?b?:
print?"ok"
else:
print?x,?'!='?,y
x=raw_input("please??number?something:")
y=raw_input("please??number?something:")
fun(x,y)[root@zabbix?tools]#?python?9.py
please??number?something:2
please??number?something:2
ok
[root@zabbix?tools]#?python?9.py
please??number?something:3
please??number?something:5
3?!=?5
*實(shí)際參數(shù):
- 在調(diào)用函數(shù)時(shí),函數(shù)名后面圓括號(hào)中的變量名稱叫做“實(shí)際參數(shù)”,簡(jiǎn)稱:實(shí)參;
小游戲:
[root@zabbix?tools]#?python?9.py
please??something:10
please???something:巧克力
正在生成一個(gè)?10?元?巧克力?口味的冰激凌!
[root@zabbix?tools]#?cat?9.py
#!/usr/bin/python
#!coding:utf8
def?mashine(x,y):
print?"正在生成一個(gè)",x,'元',y,"口味的冰激凌!"
x=raw_input("please??something:")
y=raw_input("please??something:")
mashine(x,y)
#在上述的小游戲中,當(dāng)用戶什么都不輸入的時(shí)候,這時(shí)候就需要函數(shù)的缺省參數(shù)(默認(rèn)參數(shù))。
缺省參數(shù)
總結(jié):當(dāng)設(shè)置默認(rèn)參數(shù)時(shí)是自右向左開始的!可以通過調(diào)換順序調(diào)整!#!/usr/bin/python
#!coding:utf8
def?mashine(x,y="奶油"):
print?"正在生成一個(gè)",x,'元',y,"口味的冰激凌!"
mashine(3)
[root@zabbix?tools]#?python?9.py
正在生成一個(gè)?3?元?奶油?口味的冰激凌!
當(dāng)然x?也可以有默認(rèn)值
#!/usr/bin/python
#!coding:utf8
def?mashine(x=10,y="奶油"):
print?"正在生成一個(gè)",x,'元',y,"口味的冰激凌!"
mashine()
[root@zabbix?tools]#?python?9.py
正在生成一個(gè)?10?元?奶油?口味的冰激凌!
當(dāng)傳值得時(shí)候,會(huì)使用所傳的參數(shù)
#!/usr/bin/python
#!coding:utf8
def?mashine(x=10,y="奶油"):
print?"正在生成一個(gè)",x,'元',y,"口味的冰激凌!"
mashine(3,"巧克力")
小問題:
當(dāng)參數(shù)只傳一個(gè)價(jià)格的時(shí)候:#!/usr/bin/python#!coding:utf8def?mashine(x=10,y="奶油"):????print?"正在生成一個(gè)",x,'元',y,"口味的冰激凌!"mashine(3)[root@zabbix?tools]#?python?9.py?正在生成一個(gè)?3?元?奶油?口味的冰激凌!
當(dāng)傳遞口味的時(shí)候:#!/usr/bin/python#!coding:utf8def?mashine(x=10,y="奶油"):????print?"正在生成一個(gè)",x,'元',y,"口味的冰激凌!"mashine('巧克力')[root@zabbix?tools]#?python?9.py?正在生成一個(gè)?巧克力?元?奶油?口味的冰激凌!#!/usr/bin/python#!coding:utf8def mashine(x=10,y="奶油"): ? ?print "正在生成一個(gè)",x,'元',y,"口味的冰激凌!"mashine(y='巧克力')[root@zabbix?tools]#?python?9.py?正在生成一個(gè)?10?元?巧克力?口味的冰激凌!#傳遞形參、實(shí)參的時(shí)候都可以固定給值。
如果x值有默認(rèn)參數(shù),y沒有,如下:#!/usr/bin/python
#!coding:utf8
def?mashine(x=10,y):
print?"正在生成一個(gè)",x,'元',y,"口味的冰激凌!"
mashine('巧克力')
[root@zabbix?tools]#?python?9.py
File?"9.py",?line?3
def?mashine(x=10,y):
SyntaxError:?non-default?argument?follows?default?argument
#報(bào)語(yǔ)法錯(cuò)誤;
總結(jié):當(dāng)設(shè)置默認(rèn)參數(shù)時(shí)是自右向左開始的!可以通過調(diào)換順序調(diào)整!#!/usr/bin/python
#!coding:utf8
def?mashine(x,y=10):
print?"正在生成一個(gè)",y,'元',x,"口味的冰激凌!"
mashine('巧克力')
[root@zabbix?tools]#?python?9.py
正在生成一個(gè)?10?元?巧克力?口味的冰激凌!
函數(shù)中的變量
#python 中定義的變量都有其特定的作用域
*局部變量???? : ? -在函數(shù)中定義的變量一般只能在該函數(shù)內(nèi)部使用,這些只能在程序的特定部分使用的變量我們稱為局部變量;例證:#!/usr/bin/python
def?fun():
a=100
print?a
print??a
[root@zabbix?tools]#?python?10.py
Traceback?(most?recent?call?last):
File?"10.py",?line?5,?in?
print??a
NameError:?name?'a'?is?not?defined
調(diào)用函數(shù):#!/usr/bin/python
def?fun():
a=100
print?a
fun()
print?"#"*50
print??a
[root@zabbix?tools]#?python?10.py
100
##################################################
Traceback?(most?recent?call?last):
File?"10.py",?line?7,?in?
print??a
NameError:?name?'a'?is?not?defined
#表明100是由函數(shù)調(diào)用顯示。
*全局變量;:--在一個(gè)文件頂部定義的變量可以供該文件中的任何函數(shù)調(diào)用,這些可以為整個(gè)程序所使用的變量稱為全局變量;無(wú)
全局變量和局部變量重名#!/usr/bin/python
a=10
def?fun():
a=100
x=1
print?x
print?a
fun()
print?a
[root@zabbix?123]#?python?c.py
1
100
10注意變量和函數(shù)的位置關(guān)系#!/usr/bin/python
a=10
def?fun():
a=100
x=1
print?x
print?a
print?a
fun()
[root@zabbix?123]#?python?c.py
10
1
100
global 語(yǔ)句
global? 變量名
強(qiáng)制聲明為全局變量范例:
#!/usr/bin/python
x="my?name?is?HIBOY"
def?fun():
x=100
global?y
y?=?200
print?x
fun()
print?y#!/usr/bin/python
a=10
def?fun():
global??a
a?=?100
print?a
print?a
fun()
print?a
[root@zabbix?123]#?python?c.py
10
100
100
總結(jié): 在函數(shù)之前全局變量值不變,在函數(shù)之后全局變量為函數(shù)的中全局變量的值
函數(shù)的返回值
函數(shù)被調(diào)用后會(huì)返回一個(gè)指定的值
函數(shù)調(diào)用后默認(rèn)返回None>>>?def?f(x,y):
...?????print?x+y
...
>>>?f(2,3)
5
>>>?z?=?f(5,6)
11?????????????????????#此處只是打印
>>>?print?z
None
return 返回值>>>?def?fun(x,y):
...????print?"hello!!!"
...????return?x+y
...
>>>?fun(5,7)
hello!!!
12
>>>?z?=?fun(5,7)
hello!!!
>>>?print?z
12
返回值可以是任意類型>>>?def?fun():
...?????return??range(10)
...
>>>?a?=?fun()
>>>?print?a
[0,?1,?2,?3,?4,?5,?6,?7,?8,?9]
return執(zhí)行后,函數(shù)終止>>>?def?fun():
...?????print?"hello"
...?????print?"word"
...
>>>?fun()
hello
word
>>>?def?fun():
...?????return?"hello"
...?????return?"word"
...
>>>?fun()
'hello'
區(qū)分返回值和打印>>>?def?f(x,y):
...?????if?x
...?????????return?-1
...?????print?"hello?word!"
...
>>>?f(5,6)
-1
>>>?f(7,6)
hello?word!
>>>?z?=?f(7,6)
hello?word!
>>>?print?z
None
多類型傳值和傳值冗余
-向函數(shù)傳元組和序列
*表示傳值元組和序列
>>>?t?=?('name','kong')
>>>?def?fun(x,y):
...?????print?"%s?:?%s"?%(x,y)
...
>>>?fun(*t)
name?:?kong
>>>?print?"%s?%s"?%('name','kong')
name?kong>>>?def?fun(x,y):
...?????print?x,y
...
>>>?fun('a',1)
a?1
>>>?t=('b','c')
>>>?fun(t)
Traceback?(most?recent?call?last):
File?"",?line?1,?in?
TypeError:?fun()?takes?exactly?2?arguments?(1?given)
#t是一個(gè)元組類型數(shù)據(jù)的整體,傳值時(shí)值只能對(duì)應(yīng)到x,y無(wú)法接受任何值
>>>?fun(t,10)
('b',?'c')?10
#傳值要一一對(duì)應(yīng)
>>>?f?=('kong','123','xlo')
>>>?fun(*f)
Traceback?(most?recent?call?last):
File?"",?line?1,?in?
TypeError:?fun()?takes?exactly?2?arguments?(3?given)
-向函數(shù)傳值字典
**表示傳值字典>>>?def?fun(name="name",age="0"):
...????print?"name:%s"?%?name
...????print?"age:%s"?%?age
...
>>>?fun("kong",30)
name:kong
age:30
>>>?fun("kong")
name:kong
age:0
字典傳值
>>>?d?=?{'age':30,'name':'mail'}
>>>?fun(age=30,name='mail')
name:mail
age:30
>>>?fun(**d)
name:mail
age:30
>>>?d['age']=31
>>>?fun(**d)
name:mail
age:31
>>>?c={'a':1,'b':2}
>>>?fun(**c)
Traceback?(most?recent?call?last):
File?"",?line?1,?in?
TypeError:?fun()?got?an?unexpected?keyword?argument?'a'
多類型的傳遞方式
>>>?fun(c['a'],c['b'])
name:1
age:2
處理多余的實(shí)參>>>?def?f(x,*all):
...????print?x
...????print?all
...
:
>>>?f(1)
1
()
>>>?f(1,2,3)
1
(2,?3)
傳遞默認(rèn)參數(shù)
>>>?f(x=4,y=10)
Traceback?(most?recent?call?last):
File?"",?line?1,?in?
TypeError:?f()?got?an?unexpected?keyword?argument?'y'
#10不是單純傳值
多類型傳參
>>>?def?fun(x,*all,**arges):
...????print?x
...????print?all
...????print?arges
...
**變量名定義字典
>>>?fun(1)
1
()
{}
>>>?fun(1,2,3,4,5,6)
1
(2,?3,?4,?5,?6)
{}
#多余的沒有映射關(guān)系,所以放到元組里;
>>>?fun(1,2,3,4,5,6,arges=-2)
1
(2,?3,?4,?5,?6)
{'arges':?-2}
(x給了過多的值)
>>>?fun(1,2,3,4,5,6,x=10,y=20,arges=30)
Traceback?(most?recent?call?last):
File?"",?line?1,?in?
TypeError:?fun()?got?multiple?values?for?keyword?argument?'x'
>>>?fun(1,2,3,4,5,6,y=20,arges=30)
1
(2,?3,?4,?5,?6)
{'y':?20,?'arges':?30}
總結(jié)
以上是生活随笔為你收集整理的python中def fun(a、b=200)_python 基础 函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++2个三维向量求角度差_交叉学科入门
- 下一篇: python一行代码实现99乘法表_一行