Python基礎之函式用法例項詳解

2022-09-28 09:18:07 字數 4515 閱讀 4436

通常來說,python的函式是由乙個新的語句編寫,即def,def是可執行的語句--函式並不存在,直到python執行了def後才存在。

函式是通過賦值傳遞的,引數通過賦值傳遞給函式

def語句將建立乙個函式物件並將其賦值給乙個變數名,def語句的一般格式如下:

def (arg1,arg2,arg3,……,argn):

def語句是實時執行的,當它執行的時候,它建立並將乙個新的函式物件賦值給乙個變數名,python所有的語句都是實時執行的,沒有像獨立的編譯時間這樣的流程

由於是語句,def可以出現在任一語句可以出現的地方--甚至是巢狀在其他語句中:

if test:

def fun():

...else:

def func():

......f程式設計客棧unc()

可以將函式賦值給乙個不同的變數名,並通過新的變數名進行呼叫:

othername=func()

othername()

建立函式

內建的callable函式可以用來判斷函式是否可呼叫:

>>> import math

>>> x=1

>>> y=math.sqrt

>>> callable(x)

false

>>> callable(y)

true

使用del語句定義函式:

>>> def hello(name):

return 'hello, '+name+'!'

>>> print hello('world')

hello, world!

>>> print hello('gumby')

hello, gumby!

編寫乙個fibnacci數列函式:

>>> def fibs(num):

result=[0,1]

for i in range(num-2):

result.append(result[-2]+result[-1])

return result

>>> fibs(10)

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

>>> fibs(15)

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]

在函式內為引數賦值不會改變外部任何變數的值:

>>> def try_to_change(n):

n='mr.gumby'

>>> name='mrs.entity'

>>> try_to_change(name)

>>> name

'mrs.entity'

由於字串(以及元組和數字)是不可改變的,故做引數的時候也就不會改變,但是如果將可變的資料結構如列表用作引數的時候會發生什麼:

>>> name='mrs.entity'

>>> try_to_change(name)

>>> name

'mrs.entity'

>>> def change(n):

n[0]='mr.gumby'

>>> name=['mrs.entity','mrs.thing']

>>> change(name)

>>> name

['mr.gumby', 'mrs.thing']

引數發生了改變,這就是和前面例子的重要區別

以下不用函式再做一次:

>>> name=['mrs.entity','mrs.thing']

>>> n=name #再來一次,模擬傳參行為

>>> n[0]='mr.gumby' #改變列表

>>> name

['mr.gumby', 'mrs.thing']

當2個變數同時引用乙個列表的時候,它們的確是同時引用乙個列表,想避免這種情況,可以複製乙個列表的副本,當在序列中做切片的時候,返回的切片總是乙個副本,所以複製了整個列表的切片,將會得到乙個副本:

>>> names=['mrs.entity','mrs.thing']

>>> n=names[:]

>>> n is names

false

>>> n==names

true

此時改變n不會影響到names:

>>> n[0]='mr.gumby'

>>> n

['mr.gumby', 'mrs.thing']

>>> names

['mrs.entity', 'mrs.thing']

>>> change(names[:])

>>> names

['mrs.entity', 'mrs.thing']

關鍵字引數和預設值

引數的順序可以通過給引數提供引數的名字(但是參程式設計客棧數名和值一定要對應):

>>> def hello(greeting, name):

print '%s,%s!'%(greeting, name)

>>> hello(greeting='hello',name='world!')

hello,world!!

關鍵字引數最厲害的地方在於可以在引數中給引數提供預設值:

>>> def hello_1(greeting='hello',name='world!'):

print '%s,%s!'%(greeting,name)

>>>www.cppcns.com; hello_1()

hello,world!!

>>> hello_1('greetings')

greetings,world!!

>>> hello_1('greeting','universe')

greeting,universe!

若想讓greeting使用預設值:

>>> hello_1(name='gumby')

hello,gumby!

可以給函式提供任意多的引數,實現起來也不難:

>>> def print_params(*params):

print params

>>> print_params('testing')

('testing',)

>>> print_params(1,2,3)

(1, 2, 3)

混合普通引數:

>>> def print_params_2(title,*params):

print title

print params

>>> print_params_2('params:',1,2,3)

params:

(1, 2, 3)

>>> print_params_2('nothing:')

nothing:

()星號的意思就是「收集其餘的位置引數」,如果不提供任何供收集的元素,params就是個空元組

但是不能處理關鍵字引數:

>>> print_params_2('hmm...',something=42)

traceback (most recent call last):

file "", line 1, in

print_params_2('hmm...',something=42)

typeerror: print_params_2() got an unexpected keyword argument 'something'

試試使用「**」:

>>> def print_params(**params):

print params

>>> print_params(x=1,y=2,z=3)

>>> def parames(x,y,z=3,*pospar,**keypar):

print x,y,z

print pospar

print keypar

>>> parames(1,2,3,5,6,7,foo=1,bar=2)

1 2 3

(5, 6, 7)

>>程式設計客棧》 parames(1,2)

1 2 3

(){}

>>> def print_params_3(**params):

print params

>>> print_params_3(x=1,y=2,z=3)

>>> #返回的是字典而不是元組

>>> #組合『#'與'##'

>>> def print_params_4(x,y,z=3,*pospar,**keypar):

print x,y,z

print pospar

print keypar

>>> print_params_4(1,2,3,5,6,7,foo=1,bar=2)

1 2 3

(5, 6, 7)

>>> print_params_4(1,2)

1 2 3

(){}

本文標題: python基礎之函式用法例項詳解

本文位址: /jiaoben/python/113430.html

Python學習之函式的用法例項

函式的定義def 函式名 函式體return 返回值1 返回值2函式的呼叫 有引數的函式 形式引數 defadd x,y print x y 實參,x 1,y 2 add 1,2 3def mypow x,y 2 print x y x的y次方 mypow 2 4 形式引數 args可以改為其他變數...

python匿名函式的例項用法

一般情況下,lambda就像是乙個函式簡化器,它允許在所用 中嵌入函式的定義。它們完全是可選的 一直都可以使用def替換它們 但只需嵌入少量可執行 就能使 結構更加簡潔,從而大大簡化 複雜性,提高 可讀性。1 減少重複 2 模組化 def函式 def square x return x 2 squa...

python基礎之注釋用法

ctrl q notepad ctrl pycharm ctrl c ctrl v ctrl x ctrl z 撤銷 ctrl y 反撤銷 windows快捷鍵 注釋的種類 1 單行注釋 2 多行注釋 1 單行注釋 python 2.x print 你好 了解 再其他語言中 注釋使用 比如php.2...