1. 程式人生 > >Python學習筆記——函式

Python學習筆記——函式

1 定義函式

def greet_user():
    """顯示簡單的問候語"""
    print("Hello!")
greet_user()
  1. 第一行的程式碼行使用關鍵字def來告訴Python你要定義一個函式,這是函式定義。
  2. 第二行的文字是被稱為文件字串
    (docstring)的註釋,描述了函式是做什麼的。
  3. 程式碼行print(“Hello!”)是函式體內的唯一一行程式碼, greet_user()只做一項工作:
    列印Hello!
  4. 要呼叫函式,可依次指定函式名以及用括號括起的必要資訊,如第四行所示。

1.1 向函式傳遞資訊

def greet_user(username)
:
"""顯示簡單的問候語""" print("Hello, " + username.title() + "!") greet_user('jesse')

通過在這裡新增username,
就可讓函式接受你給username指定的任何值。

2 傳遞實參

2.1 位置實參

你呼叫函式時,Python必須將函式呼叫中的每個實參都關聯到函式定義中的一個形參。為此,最簡單的關聯方式是基於實參的順序。這種關聯方式被稱為位置實參。

def describe_pet(animal_type, pet_name):
    """顯示寵物的資訊"""
    print("\nI have a "
+ animal_type + ".") print("My " + animal_type + "'s name is " + pet_name.title() + ".") describe_pet('hamster', 'harry')

呼叫describe_pet()時,需要按順序提供一種動物型別和一個名字。例如,在前面的函式呼叫中,實參’hamster’儲存在形參animal_type中,而實參’harry’儲存在形參pet_name中。
注意:位置實參的順序很重要,請確認函式呼叫中實參的順序與函式定義中形參的順序一致。

2.2 關鍵字實參

關鍵字實參是傳遞給函式的名稱—值對

。你直接在實參中將名稱和值關聯起來了,因此向函式傳遞實參時不會混淆。關鍵字實參讓你無需考慮函式呼叫中的實參順序,還清楚地指出了函式呼叫中各個值的用途。

def describe_pet(animal_type, pet_name):
    """顯示寵物的資訊"""
    print("\nI have a " + animal_type + ".")
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")

describe_pet(animal_type='hamster', pet_name='harry')

2.3 預設值

編寫函式時,可給每個形參指定預設值。在呼叫函式中給形參提供了實參時, Python將使用
指定的實參值;否則,將使用形參的預設值。

def describe_pet(pet_name, animal_type='dog'):
    """顯示寵物的資訊"""
    print("\nI have a " + animal_type + ".")
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")

describe_pet(pet_name='willie')

這裡修改了函式describe_pet()的定義,在其中給形參animal_type指定了預設值’dog’。這
樣,呼叫這個函式時,如果沒有給animal_type指定值, Python將把這個形參設定為’dog’:

I have a dog.
My dog's name is Willie

注意:Python依然將這個實參視為位置實參,因此如果函式呼叫中只包含寵物的名字,這個實參將關聯到函式定義中的第一個形參。這就是需要將pet_name放在形參列表開頭的原因所在。

3 返回值

在函式中,可使用return語句將值返回到呼叫函式的程式碼行。

def get_formatted_name(first_name, last_name):
    """返回整潔的姓名"""
    full_name = first_name + ' ' + last_name
    return full_name.title()

musician = get_formatted_name('jimi', 'hendrix')
print(musician)

結果:

Jimi Hendrix

函式可返回任何型別的值,包括==列表==和==字典==等較複雜的資料結構。

4 傳遞列表

def greet_users(names):
    """向列表中的每位使用者都發出簡單的問候"""
    for name in names:
        msg = "Hello, " + name.title() + "!"
        print(msg)

usernames = ['hannah', 'ty', 'margot']
greet_users(usernames)

結果:

Hello, Hannah!
Hello, Ty!
Hello, Margot!

4.1 在函式中修改列表

將列表傳遞給函式後,函式就可對其進行修改。在函式中對這個列表所做的任何修改都是永久性的,這讓你能夠高效地處理大量的資料。

4.2 禁止函式修改列表

為解決這個問題,可向函式傳
遞列表的副本而不是原件;這樣函式所做的任何修改都隻影響副本,而絲毫不影響原件。
要將列表的副本傳遞給函式,可以像下面這樣做:

function_name(list_name[:])

5 傳遞任意數量的實參

def make_pizza(*toppings):
    """列印顧客點的所有配料"""
    print(toppings)

make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')

形參名*toppings中的星號讓Python建立一個名為toppings的空元組,並將收到的所有值都封裝到這個==元組==中。

5.1 結合使用位置實參和任意數量實參

如果要讓函式接受不同型別的實參,必須在函式定義中將接納任意數量實參的形參放在最
後。

def make_pizza(size, *toppings):
    """概述要製作的比薩"""
    print("\nMaking a " + str(size) +
        "-inch pizza with the following toppings:")
    for topping in toppings:
        print("- " + topping)

make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

結果:

Making a 16-inch pizza with the following toppings:
- pepperoni
Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese

5.2 使用任意數量的關鍵字實參

def build_profile(first, last, **user_info):
    """建立一個字典,其中包含我們知道的有關使用者的一切"""
    profile = {}
    profile['first_name'] = first
    profile['last_name'] = last
    for key, value in user_info.items():
    profile[key] = value
return profile

user_profile = build_profile('albert', 'einstein',location='princeton',field='physics')
print(user_profile)

形參**user_info中的兩個星號讓Python建立一個名為user_info的空字典,並將收到的所
有名稱—值對都封裝到這個字典中。在這個函式中,可以像訪問其他字典那樣訪問user_info中的名稱—值對。
結果:

{'first_name': 'albert', 'last_name': 'einstein',
'location': 'princeton', 'field': 'physics'}

6 將函式儲存在模組中

6.1 匯入整個模組

要讓函式是可匯入的,得先建立模組。模組是副檔名為.py的檔案,包含要匯入到程式中的程式碼。

pizza.py

def make_pizza(size, *toppings):
    """概述要製作的比薩"""
    print("\nMaking a " + str(size) +
        "-inch pizza with the following toppings:")
    for topping in toppings:
        print("- " + topping)

making_pizzas.py

import pizza
pizza.make_pizza(16, 'pepperoni')
pizza.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

6.2 匯入特定的函式

making_pizzas2.py

from pizza import make_pizza
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

若使用這種語法,呼叫函式時就無需使用句點。由於我們在import語句中顯式地匯入了函式
make_pizza(),因此呼叫它時只需指定其名稱。

6.3 使用 as 給函式指定別名

making_pizzas3.py

from pizza import make_pizza as mp
mp(16, 'pepperoni')
mp(12, 'mushrooms', 'green peppers', 'extra cheese')

6.4 使用 as 給模組指定別名

making_pizzas4.py

import pizza as p
p.make_pizza(16, 'pepperoni')
p.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

6.5 匯入模組中的所有函式(不建議)

使用星號(*)運算子可讓Python匯入模組中的所有函式:
making_pizzas5.py

from pizza import *
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

如果模組中有函式的名稱與你的專案中使用的名稱相同,可能導致意想不到的結果:Python可能遇到多個名稱相同的函式或變數,進而覆蓋函式,而不是分別匯入所有的函式。

7 函式編寫指南

  1. 每個函式都應包含簡要地闡述其功能的註釋,該註釋應緊跟在函式定義後面,並採用文件字串格式;
  2. 給形參指定預設值時,等號兩邊不要有空格;
  3. 如果程式或模組包含多個函式,可使用兩個空行將相鄰的函式分開;
  4. 所有的import語句都應放在檔案開頭,唯一例外的情形是,在檔案開頭使用了註釋來描述整個程式.

相關推薦

python學習筆記——函式 1

呼叫函式 python內建了很多有用的函式,我們可以直接呼叫。 要呼叫一個函式,需要知道函式的名稱和引數,可從python官方網站文件 檢視python的內建函式(Built-in Function). 例如 求絕對值的函式abs,只有一個引數,可從文件檢視

Python學習筆記——函式

1 定義函式 def greet_user(): """顯示簡單的問候語""" print("Hello!") greet_user() 第一行的程式碼行使用關鍵字def來告訴Python你要定義一個函式,這是函式定義。 第二

python學習筆記——函式(三)

今天我們學習函式最後一部分 一 .函式:內嵌函式與閉包 (1)函式中如何修改全域性變數且對全域性產生影響?? (2)函式中是否可以再巢狀函式?? (3)倘若可以巢狀函式,內部函式是否可以引用外部函式的變數?? 帶著問題進入學習——> 1

Python學習筆記——函式引數

文章目錄位置引數預設引數可變引數關鍵字引數引數組合小結 位置引數 power(x, n)函式有兩個引數:x和n,這兩個引數都是位置引數,呼叫函式時,傳入的兩個值按照位置順序依次賦給引數x和n 預設引數 def power(x, n=2): s = 1

python程式設計:從入門到實踐學習筆記-函式

定義函式 舉個簡單的例子 def greet_user(username):    """先是簡單的問候語"""    print("Hello! " + username.title() + "!") greet_user("mike") 執

Python學習筆記DAY3---函式

         關於函式,程式設計哪裡少的了函式,Python裡的函式呢,使用def 來定義,如下例子: def fun(): print('這是一個函式')         &nb

Python學習筆記(二) 函式

1.內建函式 Python有很多自帶的函式,在api裡很容易找到 菜鳥教程的Python內建函式講的也不錯 這裡先試試幾個能猜的出作用的簡單函式 函式名 描述 abs() 返回數字的

python學習筆記:print 函式vs. return函式,global變數 vs. local變數

print函式與return函式差別: 一、結果: (1)return expression    ————  計算expression (2)print(statements)————  列印statements 二、輸出: (1)在互動

python學習筆記: round()函式及相關

一、round(x [ , n ]):返回x(可以為數值或運算表示式)的四捨五入值,保留n位小數。 Note1 :當小數點後正好為5時,round(X.5)=X或者X+1(trap!) ***在python2.7的doc中,round()的最後寫著,“Values are rounded t

python學習筆記: range()函式、算數運算子“//”,迴圈while與for

range() 函式——可建立一個整數列表,一般用在 for 迴圈中,函式語法:range(start, stop[, step]) start: 計數從 start 開始。預設是從 0 開始。例如range(5)等價於range(0, 5); stop: 計數到 stop 結束,但

python學習筆記:取整函式

三種取整方式: 一、向下取整:即捨去小數點後所有資料。int (n),例如: int(3.67) #figure out 3 二、四捨五入:round(n),例如: round(4.56) #figure out 5 round(-4.56) #figure o

python學習筆記python函式定義和傳參方法說明

一、函式定義方式 函式定義用關鍵字def,其引數傳遞不用設定型別,也不用定義返回,然後在函式名稱後加上:號,這點和java很不一樣,相對來說更加簡單了;另外包含關係上用四個空格來標識,而非java的;號; 如下為一個範例,定義了一個函式用來生成任意上界的菲波那契數列: # -*- c

python學習筆記(型別轉換函式)

python型別轉換函式 python提供的型別轉換函式用於各種資料型別之間互相轉換. bin(i) 函式將整數轉換為二進位制字串,以’0b’開頭.例如,bin(12),將返回字串’0b1100’. chr(i) 將一個ASCII 碼整型轉化為對應的單字元

【整理】python學習筆記(5)-- pygame庫的函式和方法整理

PYGAME的方法和官方文件查詢 官方文件 http://www.pygame.org/docs/   模組 簡介 pygame.BufferProxy An array protocol view

Python學習筆記(十一)關鍵字、函式和方法

關鍵字是 Python內建的、具有特殊意義的識別符號            關鍵字後面不需要使用括號   函式封裝了獨立功能,可以直接呼叫        

Python 學習筆記(四)[函式進階]

異常 異常捕獲 try: myfile = open('1.txt') except Exception: print('開啟檔案錯誤') else: print('開啟檔案') myfile.close() finally: print('開啟檔案結束')

Python學習筆記(三)[函式基礎]

概念 定義 宣告 a = 1 if a == 1: def func(): print('a == 1') else: def func(): print('a != 1') 傳參 # 預設

Python學習筆記系列——高階函式(map/reduce)

一、map #變數可以指向函式,函式的引數能接受變數,那麼一個函式就可以接受另一個函式作為引數,這種函式被稱之為高階函式 def add(x,y,f): return f(x)+f(y) print(add(-5,-9,abs)) ''' map()函式接受兩個引數,一個是函式,

Python學習筆記系列——高階函式(filter/sorted)

一、filter #filter()函式用於過濾序列。和map()類似,也接收一個函式和一個序列,把函式依次作用於每個元素,根據返回值是True還是False決定是否保留該元素。 #filter()函式返回的是一個Iterator,即惰性序列,所以要強迫filter()完成計算結果,需要用list(

python學習筆記--8.函式的定義與使用

這是在學習Python的時候做的筆記,有些時間了,大概是按照一本挺實用的入門書籍學的,我學習程式設計的思路一般是掌握基礎的變數型別,語法-分支結構 函式呼叫 類建立 結構體定義,記錄一些簡單的例項,剩下的就是需要用什麼百度現學。 對我來說python的優勢是,