def
doublere
(a,b)
:return a+b,a-b
a,b=doublere(1,
2)實際上返回了(a,b)這個元組,所以不是返回了多個值,仍然是返回了乙個值(tuple)。
def
register
(name,age,city=
'bj'):
******xx
******xx
這個時候如果我們呼叫函式
register(
'liming',11
)沒有問題,會將city預設為bj。如果想更改預設引數的話,可以
register(
'liming',11
,'shanghai'
)當有多個預設引數的時候,為避免混淆可以在呼叫的時候在預設引數前面加上欄位名。如:
register(
'liming',11
,city=
'shenzhen'
)
def
add(a,l=
):add(1)
add(2)
猜這時候l裡面是2呢還是1,2
.答案是1,2
因為因為預設引數l也是乙個變數,它指向物件[
],每次呼叫該函式,如果改變了l的內容,
則下次呼叫時,預設引數的內容就變了,不再是函式定義時的[
]了。
def
calc
(numbers)
:sum=0
for n in numbers:
sum=
sum+ n * n
return
sumdef
calc
(*numbers)
:sum=0
for n in numbers:
sum=
sum+ n * n
return
sum這樣接受的就是乙個tuple,calc(1,2)就ok,如果還行傳入乙個list或者tuple的話,可以在傳入引數前面也加乙個*例如
list1=【1,2,3】
calc(*list1)
def
person
(name, age,
**kw)
:print
('name:'
, name,
'age:'
, age,
'other:'
, kw)
關鍵字引數允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為乙個dict
person(
'bob',35
, city=
'beijing'
)name: bob age:
35 other:
亦可以在外面定義乙個字典,然後傳參的時候在前面加**和上面可變引數例子一樣
def
fact
(n):
return fact_iter(n,1)
deffact_iter
(num, product)
:if num ==1:
return product
return fact_iter(num -
1, num * product)
////
////
////
//def
fact
(n):
if n==1:
return
1return n * fact(n -1)
這樣的話因為有表示式所以就不是尾遞迴了。
python易誤點 賦值 深淺拷貝
str aaa str1 strprint str is str1 str bbb print str1 output true aaastr str1說明,str和str1指向同乙個位址,那麼為什麼str改變了值之後,str1沒有跟著變化呢?因為對於string這類的不可變物件,可變物件有list...
scalayi易錯點 函式與方法
最近看了很多部落格,絕大多數都完全弄混了方法與函式的定義方式 方法 def methodname argument list return type 該形式是方法 但是為什麼很多方法可以傳入方法中當引數呢?這也是很多部落格搞錯定義的地方 依據快學scala和programming in scala ...
Python 知識要點 函式
函式是python為了 最大程度的重用和最小化 冗餘而提供的最基礎的程式結構。語法 def arg1,arg2,argn 任何傳入引數和自變數必須放在圓括號中間,圓括號之間可以用於定義引數。函式的第一行語句可以選擇性地使用文件字串 用於存放函式說明。函式內容以冒號起始,並且縮排。return 表示式...