python編程基礎(七):函數 & 編寫指南

一、函數

1、函數的定義: 用 def  關鍵字來實現

def greet_user():
    """顯示簡單的問候語"""
    print('hello!')
    
    
greet_user()


結果:
hello!

注意: 在def 之後要加冒號;"""  xxxxx  """   被稱爲 文檔字符串的註釋,描述了函數的做什麼的

2、形參 與  實參

在上面例子的基礎上做簡單修改:

def greet_user(name):    # 這個 name 就是形參
    """顯示簡單的問候語"""
    print('Hello, ' + name.title() + "!")
    
     
greet_user('jesse')     #  這個 'jesse'  就是實參


結果:
Hello, Jesse!

個人理解,形參就是一個代稱,目的在於告訴  這個函數  有個值要被傳進來,但是具體是什麼值並不知道,也就是形式上的參數,沒有實際的值。而實參是傳遞給函數的值,是函數進行操作的實際值,所以叫實參。實參給形參實例化:實參→形參。

3、實參的傳遞方式

3.1 位置實參:實參的順序與形參的順序嚴格一致

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('dog','harry')
describe_pet('cat','willie')


結果:

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

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

如果順序不一致的話,會出現問題,可以發現  這個時候所顯示的就不是我們想表達的了


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('harry','dog')
describe_pet('willie','cat')

結果:

I have a harry.
My harry's name is Dog.

I have a willie.
My willie's name is Cat.

3.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(pet_name='willie',animal_type='cat')


結果:

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

上面這個例子中,傳遞形式就以   形參名=值    的形式進行

3.3 讓實參變成可選的:指定一個默認值--空字符串

有時候我們輸入的實參數目是不定的,比如在傳遞名字的時候,有的人有三個 有的 有兩個,特別是外文名字都有frist_name  和  last_name,但是 middle_name 不一定有,所以我們需要實現 實參可選。

def get_formatted_name(frist_name, last_name, middle_name=''):
    """返回整潔的名字"""
    if middle_name:
        full_name = frist_name + ' ' + middle_name + ' ' + last_name
    else:
        full_name = frist_name + ' ' + last_name
        
    return full_name.title()
    
    
musician = get_formatted_name('john', 'lee', 'hooker')
print(musician)

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



結果:
John Hooker Lee
Jimi Hendrix

在由於  middle_name  不一定有,所以就指定成了一個空的字符串 的默認值,在函數中判斷一下 是不是有值

4、傳遞任意數量的實參

4.1 不知道有多少實參:創建空元組(*形參名)

有些時候我們是不知道函數會接收多少個實參,所以就需要有 接收任意數量實參的能力。假設在製作披薩的時候不同客戶有不同的配料要求,所以每次的輸入參數的數量不定,我們可以這麼實現:

def make_pizzs(*toppings):
    """打印顧客點的所有配料"""
    print(toppings)
    
    
make_pizzs('pepperoni')
make_pizzs('mushrooms','green peppers','extra cheese')

結果:
('pepperoni',)
('mushrooms', 'green peppers', 'extra cheese')

可以發現,使用 *toppings 生成了一個元組,把每次傳進去的實參變成了相應的元組,可以做一下的更改:


def make_pizzs(*toppings):
    """打印顧客點的所有配料"""
    print('\nMaking a pizza with the following toppings:')
    for topping in toppings:
        print('-' + topping)
    
    
make_pizzs('pepperoni')
make_pizzs('mushrooms','green peppers','extra cheese')

結果:

Making a pizza with the following toppings:
-pepperoni

Making a pizza with the following toppings:
-mushrooms
-green peppers
-extra cheese

4.2 不知道實參的類型:創建空字典(**形參名)

上面的例子是我們不知道會向函數輸入多少的實參,但是有時候  我們不知道實參的類型,有時候是數值型 有時候是字符串,所以函數有時候需要有這個能力,我們可以用創建一個空字典來實現:

def build_profile(first, last, **user_info):
    proflie = {}
    proflie['first_name'] = first
    proflie['last_name'] = last
    
    for key, value in user_info.items():    # .items() 函數可以提取字典中的 鍵-值 對
        proflie[key] = value
    return proflie
    
    
user_profile = build_profile('albert','einstein',
                             location='princeton',
                             field='physics')
print(user_profile)


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

可見,**user_info 創建了一個空字典

二、函數編寫指南

1、給函數起一個 描述性的名稱 並且使用小寫字母及下劃線,可以直接從函數的名稱就知道函數的功能

2、編寫較好的文檔字符串("""xxxxxx"""),讓別的程序員只需要閱讀文檔中的描述就能使用這個函數

3、給形參在指定默認值的時候,等號兩邊最好不要加空格;函數調用時也最好不要加空格

       def function_name(parameter_0, parameter_1='default value')

       function_name(value_0, parameter_1='value')

4、所有的import都放在程序的開頭

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章