python易誤點 函式

2021-10-03 17:55:09 字數 1910 閱讀 5386

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 表示式...