国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python基礎(chǔ)之(七)函數(shù)

microelec / 2018人閱讀

摘要:函數(shù)建立函數(shù)在中,規(guī)定了一種定義函數(shù)的格式,下面的舉例就是一個(gè)函數(shù),以這個(gè)函數(shù)為例來(lái)說(shuō)明定義函數(shù)的格式和調(diào)用函數(shù)的方法。返回值所謂返回值,就是函數(shù)向調(diào)用函數(shù)的地方返回的數(shù)據(jù)。

函數(shù) 建立函數(shù)

在Python中,規(guī)定了一種定義函數(shù)的格式,下面的舉例就是一個(gè)函數(shù),以這個(gè)函數(shù)為例來(lái)說(shuō)明定義函數(shù)的格式和調(diào)用函數(shù)的方法。

def add_function(a, b): #冒號(hào)必須
   c = a + b  #縮進(jìn)必須
   return c

if __name__ == "__main__":
   result = add_function(2, 3)
   print result               #python3: print(result)

定義函數(shù)的格式為:

def 函數(shù)名(參數(shù)1,參數(shù)2,...,參數(shù)n):

   函數(shù)體(語(yǔ)句塊)

幾點(diǎn)說(shuō)明:

函數(shù)名的命名規(guī)則要符合Python中的命名要求。一般用小寫字母和單下劃線、數(shù)字等組合,有人習(xí)慣用aaBb的樣式,但我不推薦

def是定義函數(shù)的關(guān)鍵詞,這個(gè)簡(jiǎn)寫來(lái)自英文單詞define

函數(shù)名后面是圓括號(hào),括號(hào)里面,可以有參數(shù)列表,也可以沒(méi)有參數(shù)

千萬(wàn)不要忘記了括號(hào)后面的冒號(hào)

函數(shù)體(語(yǔ)句塊),相對(duì)于def縮進(jìn),按照python習(xí)慣,縮進(jìn)四個(gè)空格

函數(shù)命名

Python對(duì)命名的一般要求:

文件名:全小寫,可使用下劃線

函數(shù)名:小寫,可以用下劃線風(fēng)格單詞以增加可讀性。如:myfunction,my_example_function。注意:混合大小寫僅被允許用于這種風(fēng)格已經(jīng)占據(jù)優(yōu)勢(shì)的時(shí)候,以便保持向后兼容。有的人,喜歡用這樣的命名風(fēng)格:myFunction,除了第一個(gè)單詞首字母外,后面的單詞首字母大寫。這也是可以的,因?yàn)樵谀承┱Z(yǔ)言中就習(xí)慣如此。但我不提倡,這是我非常鮮明的觀點(diǎn)。

函數(shù)的參數(shù):命名方式同變量(本質(zhì)上就是變量)。如果一個(gè)參數(shù)名稱和Python保留的關(guān)鍵字沖突,通常使用一個(gè)后綴下劃線會(huì)好于使用縮寫或奇怪的拼寫。

變量:變量名全部小寫,由下劃線連接各個(gè)單詞。如color = WHITE,this_is_a_variable = 1。

調(diào)用函數(shù)

定義函數(shù)

>>> def add(x,y):       #為了能夠更明了顯示參數(shù)賦值特點(diǎn),重寫此函數(shù)
...     print "x=",x         #分別打印參數(shù)賦值結(jié)果
...     print "y=",y
...     return x+y
... 

普通調(diào)用

>>> add(10, 3)           #x=10,y=3
x= 10
y= 3
13

還可以直接把賦值語(yǔ)句寫到里面,就明確了參數(shù)和對(duì)象的關(guān)系。當(dāng)然,這時(shí)候順序就不重要了

>>> add(x=10, y=3)       
x= 10
y= 3
13

>>> add(y=10, x=3)
x= 3
y= 10
13

多態(tài)調(diào)用

>>> def times(x, y=2):       #y的默認(rèn)值為2
    ...     print "x=",x                 #Python 3: print("x={}".format(x)),以下類似,從略。
    ...     print "y=",y
    ...     return x*y
    ... 
    >>> times(3)                #x=3,y=2
    x= 3
    y= 2
    6

    >>> times(x=3)              #同上
    x= 3
    y= 2
    6
    
>>> times(3, 4)              #x=3,y=4,y的值不再是2
x= 3
y= 4
12

>>> times("qiwsir")         #再次體現(xiàn)了多態(tài)特點(diǎn)
x= qiwsir
y= 2
"qiwsirqiwsir"
注意事項(xiàng)

下面的若干條,是常見編寫代碼的注意事項(xiàng):

別忘了冒號(hào)。一定要記住復(fù)合語(yǔ)句首行末尾輸入“:”(if,while,for等的第一行)

從第一行開始。要確定頂層(無(wú)嵌套)程序代碼從第一行開始。

空白行在交互模式提示符下很重要。模塊文件中符合語(yǔ)句內(nèi)的空白行常被忽視。但是,當(dāng)你在交互模式提示符下輸入代碼時(shí),空白行則是會(huì)結(jié)束語(yǔ)句。

縮進(jìn)要一致。避免在塊縮進(jìn)中混合制表符和空格。

使用簡(jiǎn)潔的for循環(huán),而不是while or range.相比,for循環(huán)更易寫,運(yùn)行起來(lái)也更快

要注意賦值語(yǔ)句中的可變對(duì)象。

不要期待在原處修改的函數(shù)會(huì)返回結(jié)果,比如list.append(),這在可修改的對(duì)象中特別注意

調(diào)用函數(shù)是,函數(shù)名后面一定要跟隨著括號(hào),有時(shí)候括號(hào)里面就是空空的,有時(shí)候里面放參數(shù)。

不要在導(dǎo)入和重載中使用擴(kuò)展名或路徑。

返回值

所謂返回值,就是函數(shù)向調(diào)用函數(shù)的地方返回的數(shù)據(jù)。

編寫一個(gè)斐波那契數(shù)列函數(shù):

#!/usr/bin/env python
# coding=utf-8

def fibs(n):
   result = [0,1]
   for i in range(n-2):
       result.append(result[-2] + result[-1])
   return result

if __name__ == "__main__":
   lst = fibs(10)
   print lst
返回多個(gè)值元組
    >>> def my_fun():
    ...     return 1, 2, 3
    ... 
    >>> a = my_fun()
    >>> a
    (1, 2, 3)

對(duì)這個(gè)函數(shù),我們還可以用這樣的方式來(lái)接收函數(shù)的返回值。

 >>> x, y, z = my_fun()
    >>> x
    1
    >>> y
    2
    >>> z
    3
函數(shù)文檔
#!/usr/bin/env python
# coding=utf-8

def fibs(n):
   """
   This is a Fibonacci sequence. #函數(shù)文檔
   """
   result = [0,1]
   for i in range(n-2):
       result.append(result[-2] + result[-1])
   return result

if __name__ == "__main__":
   lst = fibs(10)
   print lst
    >>> def my_fun():
    ...     """
    ...     This is my function.
    ...     """
    ...     print "I am a craft."
    ... 
    >>> my_fun.__doc__  #調(diào)用打印函數(shù)文檔
    "
    This is my function.
    "
參數(shù)收集

函數(shù)參數(shù)的個(gè)數(shù)也有不確定的時(shí)候,怎么解決這個(gè)問(wèn)題呢?Python用這樣的方式解決參數(shù)個(gè)數(shù)的不確定性。

元組形式
def func(x, *arg): 
    print x         #Python 3請(qǐng)自動(dòng)修改為print()的格式,下同,從略。
    result = x
    print arg       #輸出通過(guò)*arg方式得到的值
    for i in arg:
        result +=i
    return result

print func(1, 2, 3, 4, 5, 6, 7, 8, 9)    #賦給函數(shù)的參數(shù)個(gè)數(shù)不僅僅是2個(gè)
字典形式
   >>> def foo(**kargs):
    ...     print kargs        #Python 3:  print(kargs)
    ...
    >>> foo(a=1,b=2,c=3)    #注意觀察這次賦值的方式和打印的結(jié)果
    {"a": 1, "c": 3, "b": 2}
一種優(yōu)雅的方式
>>> def add(x, y):
...     return x + y
... 
>>> add(2, 3)
5

>>> bars = (2, 3)
>>> add(*bars)
5
    
>>> bars = (2, 3, 4) #元組中元素的個(gè)數(shù),要跟函數(shù)所要求的變量個(gè)數(shù)一致,不然如下報(bào)錯(cuò)
>>> add(*bars)
Traceback (most recent call last):
 File "", line 1, in 
TypeError: add() takes exactly 2 arguments (3 given)
綜合 def foo(p1, p2, p3, ...)
>>> def foo(p1, p2, p3):
...     print "p1==>",p1        #Python 3用戶修改為print()格式,下同
...     print "p2==>",p2
...     print "p3==>",p3
... 
>>> foo("python", 1, ["qiwsir","github","io"])   
p1==> python
p2==> 1
p3==> ["qiwsir", "github", "io"]
def foo(p1=value1, p2=value2, ...)
>>> foo(p3=3, p1=10, p2=222)
    p1==> 10
    p2==> 222
    p3==> 3

>>> def foo(p1, p2=22, p3=33):    #設(shè)置了兩個(gè)參數(shù)p2, p3的默認(rèn)值
...     print "p1==>",p1
...     print "p2==>",p2
...     print "p3==>",p3
... 
>>> foo(11)     #p1=11,其它的參數(shù)為默認(rèn)賦值
p1==> 11
p2==> 22
p3==> 33
>>> foo(11, 222)     #按照順序,p2=222, p3依舊維持原默認(rèn)值
p1==> 11
p2==> 222
p3==> 33
>>> foo(11, 222, 333)  #按順序賦值
p1==> 11
p2==> 222
p3==> 333

>>> foo(11, p2=122)
p1==> 11
p2==> 122
p3==> 33

>>> foo(p2=122)     #p1沒(méi)有默認(rèn)值,必須要賦值的,否則報(bào)錯(cuò)
Traceback (most recent call last):
 File "", line 1, in 
TypeError: foo() takes at least 1 argument (1 given)
def foo(*args)

這種方式適合于不確定參數(shù)個(gè)數(shù)的時(shí)候,在參數(shù)args前面加一個(gè)*

>>> def foo(*args): 
...     print args
... 
>>> foo("qiwsir.github.io")
("qiwsir.github.io",)
>>> foo("qiwsir.github.io","python")
("qiwsir.github.io", "python")
def foo(**args)

這種方式跟上面的區(qū)別在于,必須接收類似arg=val形式的。

>>> def foo(**args):    
...     print args
... 

>>> foo(1,2,3)   
Traceback (most recent call last):
 File "", line 1, in 
TypeError: foo() takes exactly 0 arguments (3 given)

>>> foo(a=1,b=2,c=3)
{"a": 1, "c": 3, "b": 2}
特殊函數(shù) lambda
# !/usr/bin/env python
#coding=utf-8

def add(x,y = 3):
    return x + y

ret = add(5)
print ret

lam = lambda x : x + 3
ret = lam(5)
print ret

lam = lambda x,y : x + y
ret = lam(5,5)
print ret

8
8
10

lambda函數(shù)的使用方法:

lambda后面直接跟變量;

變量后面是冒號(hào);

冒號(hào)后面是表達(dá)式,表達(dá)式計(jì)算結(jié)果就是本函數(shù)的返回值;

lambda函數(shù)不能包含太多的命令,包含的表達(dá)式不能超過(guò)一個(gè),不要試圖向lambda函數(shù)中塞入太多的東西,如果需要更復(fù)雜的東西,應(yīng)該定義一個(gè)普通的函數(shù)。

map
# !/usr/bin/env python
#coding=utf-8

def add(x,y = 3):
    return x + y

numbers = range(9)
print numbers

ret = map(add, numbers) #只引用函數(shù)名即可
print ret

ret = map(lambda x : x + 4, numbers) #
print ret

ret = [x + 4 for x in numbers] #列表解析的方式實(shí)現(xiàn)
print ret

map()是Python的一個(gè)內(nèi)置函數(shù),它的基本樣式是:
map(fun,seq)

func是一個(gè)函數(shù),seq是一個(gè)序列對(duì)象。在執(zhí)行的時(shí)候,序列對(duì)象中的每個(gè)對(duì)象,按照從左到右的順序依次被取出來(lái),塞入到func函數(shù)里面,并將func的返回值依次存到一個(gè)列表中。

reduce

reduce()是橫著逐個(gè)元素進(jìn)行運(yùn)算

# !/usr/bin/env python
#coding=utf-8

def add(x,y): #連續(xù)相加
    return x + y

def mul(x,y): #連續(xù)相乘
    return x * y

numbers = range(9)
print numbers

ret = reduce(add, numbers) 
print ret

ret = reduce(mul, numbers) 
print ret

[0, 1, 2, 3, 4, 5, 6, 7, 8]
36
0
filter
# !/usr/bin/env python
#coding=utf-8

numbers = range(-5,5)
print numbers

ret = filter(lambda x : x > 0, numbers) #過(guò)濾掉x < 0的數(shù)
print ret

ret = [x for x in numbers if x > 0]
print ret

ret = filter(lambda c : c != "i", "liuguoquan") #過(guò)濾掉字符i
print ret
練習(xí) 求解一元二次方程
# !/usr/bin/env python
#coding=utf-8

"""
 求解一元二次方程
 
"""

from __future__ import division
import math

def quadratic_equation(a,b,c):
    delta = b * b - 4 * a * c
    if delta < 0:
        return False
    elif delta == 0:
        return -(b / (2 * a))
    else:
        sqrt_delat = math.sqrt(delta)
        x1 = (-b + sqrt_delat) / (2 * a)
        x2 = (-b - sqrt_delat) / (2 * a)
        return x1,x2

if __name__ == "__main__":
    print "a quadratic equation: x^2 + 2x + 1 = 0"
    coefficients = (1,2,1)
    roots = quadratic_equation(*coefficients)
    if roots:
        print "the result is: ",roots
    else:
        print "this equation has no solution"
        
a quadratic equation: x^2 + 2x + 1 = 0
the result is:  -1.0
統(tǒng)計(jì)考試成績(jī)
# !/usr/bin/env python
#coding=utf-8

"""
 統(tǒng)計(jì)考試成績(jī)
 
"""

from __future__ import division
import math

def average_score(scores):
    """
        統(tǒng)計(jì)平均分
    """
    score_values = scores.values()
    sum_scores = sum(score_values)
    average = sum_scores / len(score_values)
    return average

def sorted_score(scores):
    """
        對(duì)成績(jī)從高到低排序呢
    """
    score_list = [(scores[k],k) for k in scores]  #將鍵-值互換位置 score_list是列表,里面的元素是一個(gè)元組
    sort_lst = sorted(score_list,reverse = True)
    return [(i[1],i[0]) for i in sort_lst] #將鍵-值互換位置

def max_score(scores):
    """
        成績(jī)最高的姓名和分?jǐn)?shù)
    """
    lst = sorted_score(scores)
    max_score = lst[0][1]
    return [(i[0],i[1]) for i in lst if i[1] == max_score]

def min_scroe(scores):
    """
        成績(jī)最低的姓名和分?jǐn)?shù)
    """
    lst = sorted_score(scores)
    min_score = lst[len(lst) - 1][1]
    return [(i[0],i[1]) for i in lst if i[1] == min_score]

if __name__ == "__main__":
    scores = {"google":98,"facebook":99,"baidu":52,"alibab":80,"yahoo":49,"android":76,"apple":99,"amazon":99}
    
    ret = average_score(scores) #平均分
    print "average is: ",ret

    ret = sorted_score(scores) #成績(jī)表
    print "list of scores is: ",ret
    
    ret = max_score(scores) #學(xué)霸們
    print "學(xué)霸是: ",ret
    
    ret = min_scroe(scores) #學(xué)渣
    print "學(xué)渣是: ",ret

average is:  81.5
list of scores is:  [("facebook", 99), ("apple", 99), ("amazon", 99), ("google", 98), ("alibab", 80), ("android", 76), ("baidu", 52), ("yahoo", 49)]
學(xué)霸是:  [("facebook", 99), ("apple", 99), ("amazon", 99)]
學(xué)渣是:  [("yahoo", 49)]
找質(zhì)數(shù)

質(zhì)數(shù)又稱素?cái)?shù),指在大于1的自然數(shù)中,除了1和此整數(shù)自身外,無(wú)法被其他自然整數(shù)整除的數(shù)(也可定義為只有1和本身兩個(gè)因數(shù)的數(shù))

# !/usr/bin/env python
#coding=utf-8

"""
尋找質(zhì)數(shù)
"""
import math

def is_prime(n):
    """
    判斷一個(gè)數(shù)是否是質(zhì)數(shù)
    """
    if n <=1:
        return False
    for i in range(2,int(math.sqrt(n) + 1)):
        if n % i == 0:
            return False
        return True

if __name__ == "__main__":
    
    primes = [i for i in range(2,100) if is_prime(i)]
    print primes

[5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]     
編寫函數(shù)的注意事項(xiàng)

盡量不要使用全局變量

如果參數(shù)是可變數(shù)據(jù)類型,則在函數(shù)內(nèi)不要修改它

每個(gè)函數(shù)的功能和目的要單一,不要一個(gè)函數(shù)試圖做很多事情

函數(shù)的代碼行數(shù)盡量少

函數(shù)的獨(dú)立性越強(qiáng)越好,不要跟其他的外部東西產(chǎn)生關(guān)聯(lián)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/38204.html

相關(guān)文章

  • Python爬蟲學(xué)習(xí)路線

    摘要:以下這些項(xiàng)目,你拿來(lái)學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個(gè)步驟都能做到很優(yōu)秀的時(shí)候,你應(yīng)該考慮如何組合這四個(gè)步驟,使你的爬蟲達(dá)到效率最高,也就是所謂的爬蟲策略問(wèn)題,爬蟲策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設(shè)計(jì)方案,比如說(shuō)。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個(gè)階段: 1.剛上手的時(shí)候肯定是先過(guò)一遍Python最基本的知識(shí),比如說(shuō):變量、數(shù)據(jù)結(jié)構(gòu)、語(yǔ)法...

    liaoyg8023 評(píng)論0 收藏0
  • 基礎(chǔ)如何學(xué)爬蟲技術(shù)

    摘要:楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),。本文來(lái)源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲軟件定制開發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類信息學(xué)術(shù)研究等。 楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),http://www.chujiangdata.com。 第一:Python爬蟲學(xué)習(xí)系列教程(來(lái)源于某博主:htt...

    KunMinX 評(píng)論0 收藏0
  • Python 進(jìn)階路 () 隱藏的神奇寶藏:探秘Collections

    摘要:它需要一個(gè)函數(shù)默認(rèn)工廠作為其參數(shù)。默認(rèn)情況下設(shè)置為,即如果鍵不存在則為,并返回并顯示默認(rèn)值。因此,它是一個(gè)無(wú)序集合,其中元素及其各自的計(jì)數(shù)存儲(chǔ)為字典。這相當(dāng)于其他語(yǔ)言的或。使用,我們不必使用整數(shù)索引來(lái)訪問(wèn)元組的成員。 神奇的collections 大家好,今天想和大家分享一個(gè)Python里面非常棒的模快:Collections 該模塊實(shí)現(xiàn)了專門的容器數(shù)據(jù)類型,為Python的通用內(nèi)置容...

    rickchen 評(píng)論0 收藏0
  • 《全棧數(shù)據(jù)門》初稿完成

    摘要:全棧數(shù)據(jù)之門暫定書名是末學(xué)近年來(lái)工作技能的積累,從個(gè)月前開通公眾號(hào)寫的第一篇起,中間也不知度過(guò)了多少個(gè)寂寞的夜晚。如果此書能叫全棧數(shù)據(jù)之門具體書名還得再與出版社編輯討論才定,那么也許下一本就叫全棧數(shù)據(jù)之路。 《全棧數(shù)據(jù)之門》(暫定書名)是末學(xué)近5年來(lái)工作技能的積累,從8個(gè)月前開通公眾號(hào)寫的第一篇起,中間也不知度過(guò)了多少個(gè)寂寞的夜晚。 寫文章本來(lái)就是一個(gè)很費(fèi)力的活,況且寫書要求還得高些。...

    honhon 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<