欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中函數(shù)的創(chuàng)建與調(diào)用你了解嗎

 更新時(shí)間:2022年03月30日 15:44:33   作者:weixin_44989941  
這篇文章主要為大家詳細(xì)介紹了Python中函數(shù)的創(chuàng)建與調(diào)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

創(chuàng)建函數(shù)

函數(shù)用 def 語句創(chuàng)建,語法如下:

def 函數(shù)名(參數(shù)列表):  # 具體情況具體對(duì)待,參數(shù)可有可無
	"""函數(shù)說明文檔字符串"""
    函數(shù)封裝的代碼
    ……

標(biāo)題行由 def 關(guān)鍵字,函數(shù)的名字,以及參數(shù)的集合(如果有的話)組成

def 子句的剩余部分包括了一個(gè)雖然可選但是強(qiáng)烈推薦的文檔字串,和必需的函數(shù)體

函數(shù)名稱 的命名應(yīng)該 符合 標(biāo)識(shí)符的命名規(guī)則

  • 可以由 字母、下劃線 和 數(shù)字 組成
  • 不能以數(shù)字開頭
  • 不能與關(guān)鍵字重名
def washing_machine():  # 洗衣機(jī)可以幫我們完成
    print("打水")
    print("洗衣服")
    print("甩干")

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

使用一對(duì)圓括號(hào) () 調(diào)用函數(shù),如果沒有圓括號(hào),只是對(duì)函數(shù)的引用

任何輸入的參數(shù)都必須放置在括號(hào)中

圖例:

案例:加洗衣粉

def washing_machine():  # 洗衣機(jī)可以幫我們完成
    print("打水")
    print("加洗衣粉?。。?)
    print("洗衣服")
    print("甩干")
# 早上洗衣服
washing_machine()
# 中午洗衣服
washing_machine()
# 晚上洗衣服
washing_machine()

總結(jié)

  • 定義好函數(shù)之后,只表示這個(gè)函數(shù)封裝了一段代碼而已
  • 如果不主動(dòng)調(diào)用函數(shù),函數(shù)是不會(huì)主動(dòng)執(zhí)行的

思考

  • 能否將 函數(shù)調(diào)用 放在 函數(shù)定義 的上方?
    • 不能!
    • 因?yàn)樵?nbsp;使用函數(shù)名 調(diào)用函數(shù)之前,必須要保證 Python 已經(jīng)知道函數(shù)的存在
    • 否則控制臺(tái)會(huì)提示 NameError: name 'menu' is not defined (名稱錯(cuò)誤:menu 這個(gè)名字沒有被定義)

函數(shù)的參數(shù)

形參和實(shí)參 

  • 形參定義 函數(shù)時(shí),小括號(hào)中的參數(shù),是用來接收參數(shù)用的,在函數(shù)內(nèi)部 作為變量使用
  • 實(shí)參調(diào)用 函數(shù)時(shí),小括號(hào)中的參數(shù),是用來把數(shù)據(jù)傳遞到 函數(shù)內(nèi)部 用的

問題

當(dāng)我們想洗其他的東西,要手動(dòng)改方法內(nèi)部的代碼:

def washing_machine():  # 洗衣機(jī)可以幫我們完成
    print("打水")
    print("加洗衣粉!??!")
    print("洗床單")  # 洗被套
    print("甩干")

在函數(shù)內(nèi)部有一定的變化的值:

def washing_machine():  # 洗衣機(jī)可以幫我們完成
    print("打水")
    print("加洗衣粉?。。?)
    print("洗衣服")
    print("甩干")
washing_machine()
def washing_machine():  # 洗衣機(jī)可以幫我們完成
    print("打水")
    print("加洗衣粉?。?!")
    print("洗床單")
    print("甩干")
washing_machine()
......

思考一下存在什么問題

函數(shù)只能處理固定的數(shù)據(jù)

如何解決?

如果能夠把需要處理的數(shù)據(jù),在調(diào)用函數(shù)時(shí),傳遞到函數(shù)內(nèi)部就好了!

傳遞參數(shù)

  • 在函數(shù)名的后面的小括號(hào)內(nèi)部填寫 參數(shù)
  • 多個(gè)參數(shù)之間使用 , 分隔
  • 調(diào)用函數(shù)時(shí),實(shí)參的個(gè)數(shù)需要與形參個(gè)數(shù)一致,實(shí)參將依次傳遞給形參
def washing_machine(something):  # 洗衣機(jī)可以幫我們完成
    print("打水")
    print("加洗衣粉?。?!")
    print("洗" + something)
    print("甩干")
# 洗衣服
washing_machine("衣服")
# 洗床單
washing_machine("床單")

圖例

def washing_machine(xidiji,something):  # 洗衣機(jī)可以幫我們完成
    print("打水")
    print("加" + xidiji)
    print("洗衣服" + something)
    print("甩干")
#早上洗衣服
#按照參數(shù)位置順序傳遞參數(shù)的方式叫做位置傳參
#使用洗衣機(jī),執(zhí)行洗衣機(jī)內(nèi)部的邏輯
washing_machine("洗衣液","衣服")#something = 衣服
#中午洗被罩
washing_machine("洗衣粉","被罩")# something = 被罩
#晚上洗床單
washing_machine("五糧液","床單")# something = 床單

作用

  • 函數(shù),把 具有獨(dú)立功能的代碼塊 組織為一個(gè)小模塊,在需要的時(shí)候 調(diào)用
  • 函數(shù)的參數(shù),增加函數(shù)的 通用性,針對(duì) 相同的數(shù)據(jù)處理邏輯,能夠 適應(yīng)更多的數(shù)據(jù)

1.在函數(shù) 內(nèi)部,把參數(shù)當(dāng)做 變量 使用,進(jìn)行需要的數(shù)據(jù)處理

2.函數(shù)調(diào)用時(shí),按照函數(shù)定義的參數(shù)順序,把 希望在函數(shù)內(nèi)部處理的數(shù)據(jù),通過參數(shù) 傳遞

位置參數(shù)

與 shell 腳本類似,程序名以及參數(shù)都以位置參數(shù)的方式傳遞給 python 程序,使用 sys 模塊的 argv 列表接收

圖例

默認(rèn)參數(shù)

默認(rèn)參數(shù)就是聲明了 默認(rèn)值 的參數(shù),因?yàn)榻o參數(shù)賦予了默認(rèn)值,所以在函數(shù)調(diào)用時(shí),不向該參數(shù)傳入值也是允許的

函數(shù)的返回值

  • 在程序開發(fā)中,有時(shí)候,會(huì)希望 一個(gè)函數(shù)執(zhí)行結(jié)束后,告訴調(diào)用者一個(gè)結(jié)果,以便調(diào)用者針對(duì)具體的結(jié)果做后續(xù)的處理
  • 返回值 是函數(shù) 完成工作后,最后 給調(diào)用者的 一個(gè)結(jié)果
  • 在函數(shù)中使用 return 關(guān)鍵字可以返回結(jié)果
  • 調(diào)用函數(shù)一方,可以 使用變量 來 接收 函數(shù)的返回結(jié)果

案例:計(jì)算任意兩個(gè)數(shù)字的和

# 函數(shù)的返回值: return, 用于對(duì)后續(xù)邏輯的處理
# 理解: 把結(jié)果揣兜里,后續(xù)想干啥干啥,想打印打印,想求和就求和
# 注意:
# a. 函數(shù)中如果沒有return,那么解釋器會(huì)自動(dòng)加一個(gè)return None
# b. return表示函數(shù)的終止,return后的代碼都不會(huì)執(zhí)行
# 1 定義一個(gè)函數(shù),計(jì)算兩個(gè)數(shù)的和
# 2 計(jì)算這兩個(gè)數(shù)的和是不是偶數(shù)
def get_sum(x, y=100):  # 默認(rèn)參數(shù)
    he = x + y  # sum = 10 + 20
    return he   # return 30
    print("return表示函數(shù)的終止,return后的代碼都不會(huì)執(zhí)行")
# 將函數(shù)return后的結(jié)果賦值給變量dc: dc = sum  ->  dc = 30
dc = get_sum(10, 20)  # x = 10, y = 20
print("dc:", dc)  # 30
dc1 = get_sum(10)  # x = 10, y = 100
print("dc1:", dc1)  # 110
# if dc % 2 == 0:
#     print("偶數(shù)")
# else:
#     print("奇數(shù)")
 
#默認(rèn)參數(shù)
#注意:具有默認(rèn)值的參數(shù)后面不能跟沒有默認(rèn)值的參數(shù)
def get_sum(a=20,b=5,c=10):
    he = a + b+ c
    return he
 
dc = get_sum(1,2,3) #a=1 b=2 c=3
print("dc:",dc) # 6
dc1 = get_sum(1,2)  # a=1 b=2 c=10
print("dc1:",dc1) # 13
dc2 = get_sum(1)  # a=1 b=5 c=10
print("dc2:",dc2) # 16
dc3 = get_sum()
print("dc3:",dc3) # 35

 修改菲波那切數(shù)列

def new_fib(n=8):
    list01 = [0,1]  #定義列表,指定初始值
    for dc in range(n-2):
        list01.append(list01[-1]+list01[-2])
    return list01
 
dc = new_fib()   #不加參數(shù)默認(rèn)是8
dc1 = new_fib(10)
print("dc:",dc)
print("dc1:",dc1)

生成隨機(jī)密碼:

#練習(xí):生成隨機(jī)密碼
#創(chuàng)建 randpass.py 腳本,要求如下:
#編寫一個(gè)能生成8位隨機(jī)密碼的程序
#使用 random 的 choice 函數(shù)隨機(jī)取出字符
#由用戶決定密碼長度
import random
def new_password():
    n = int(input("密碼長度:"))
    password = ""
    all = "0123456789zxcvbnmlkjhgfdsaqwertyuiopPOIUYTREWQASDFGHJKLMNBVCXZ" # 0-9 a-z A-Z
    random.choice(all)
    for i in range(n):
        dc = random.choice(all)
        password += dc
    # print("passwd:",password)
    return password
# 調(diào)用函數(shù),才能執(zhí)行函數(shù)內(nèi)部邏輯
dc = new_password()
print("dc:",dc)

#練習(xí):生成隨機(jī)密碼
#創(chuàng)建 randpass.py 腳本,要求如下:
#編寫一個(gè)能生成8位隨機(jī)密碼的程序
#使用 random 的 choice 函數(shù)隨機(jī)取出字符
#由用戶決定密碼長度
import random,string
def new_password():
    n = int(input("密碼長度:"))
    password = ""
    all = string.ascii_letters + string.digits
    random.choice(all)
    for i in range(n):
        dc = random.choice(all)
        password += dc
    # print("passwd:",password)
    return password
# 調(diào)用函數(shù),才能執(zhí)行函數(shù)內(nèi)部邏輯
dc = new_password()
print("dc:",dc)

模塊基礎(chǔ)

定義模塊

基本概念

  • 模塊是從邏輯上組織python代碼的形式
  • 當(dāng)代碼量變得相當(dāng)大的時(shí)候,最好把代碼分成一些有組織的代碼段,前提是保證它們的 彼此交互
  • 這些代碼片段相互間有一定的聯(lián)系,可能是一個(gè)包含數(shù)據(jù)成員和方法的類,也可能是一組相關(guān)但彼此獨(dú)立的操作函數(shù)

導(dǎo)入模塊 (import)

  • 使用 import 導(dǎo)入模塊
  • 模塊屬性通過 “模塊名.屬性” 的方法調(diào)用
  • 如果僅需要模塊中的某些屬性,也可以單獨(dú)導(dǎo)入

為什么需要導(dǎo)入模塊?

可以提升開發(fā)效率,簡化代碼

正確使用

# test.py,將 file_copy.py 放在同級(jí)目錄下
# 需求:要將/etc/passwd復(fù)制到/tmp/passwd
src_path = "/etc/passwd"
dst_path = "/tmp/passwd"
# 如何復(fù)制?
# 調(diào)用已有模塊中的方法
#    - 很推薦,簡單粗暴不動(dòng)腦
#    - 直接使用 file_copy.py的方法即可
 
# 導(dǎo)入方法一:直接導(dǎo)入模塊
import file_copy  # 要注意路徑問題
file_copy.copy(src_path, dst_path)
 
# 導(dǎo)入方法二:只導(dǎo)入 file_copy 模塊的 copy 方法
from file_copy import copy  # 如果相同時(shí)導(dǎo)入多個(gè)模塊 from file_copy import *
copy(src_path, dst_path)
 
# 導(dǎo)入方法四:導(dǎo)入模塊起別名 as
import file_copy as fc
fc.copy(src_path, dst_path)

常用的導(dǎo)入模塊的方法

  • 一行指導(dǎo)入一個(gè)模塊,可以導(dǎo)入多行, 例如:import random
  • 只導(dǎo)入模塊中的某些方法,例如:from random import choice, randint

模塊加載 (load)

  • 一個(gè)模塊只被 加載一次,無論它被導(dǎo)入多少次
  • 只加載一次可以 阻止多重導(dǎo)入時(shí),代碼被多次執(zhí)行
  • 如果兩個(gè)文件相互導(dǎo)入,防止了無限的相互加載
  • 模塊加載時(shí),頂層代碼會(huì)自動(dòng)執(zhí)行,所以只將函數(shù)放入模塊的頂層是最好的編程習(xí)慣

模塊特性及案例

模塊特性

模塊在被導(dǎo)入時(shí),會(huì)先完整的執(zhí)行一次模塊中的 所有程序

案例

# foo.py
print(__name__)
 
# bar.py
import foo  # 導(dǎo)入foo.py,會(huì)將 foo.py 中的代碼完成的執(zhí)行一次,所以會(huì)執(zhí)行 foo 中的 print(__name__)

結(jié)果:

# foo.py   ->   __main__   當(dāng)模塊文件直接執(zhí)行時(shí),__name__的值為‘__main__’
# bar.py   ->   foo        當(dāng)模塊被另一個(gè)文件導(dǎo)入時(shí),__name__的值就是該模塊的名字

所以我們以后在 Python 模塊中執(zhí)行代碼的標(biāo)準(zhǔn)格式:

def test():
    ......
if __name__ == "__main__":
    test()

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 利用python實(shí)現(xiàn)漢字轉(zhuǎn)拼音的2種方法

    利用python實(shí)現(xiàn)漢字轉(zhuǎn)拼音的2種方法

    這篇文章主要給大家介紹了關(guān)于如何利用python實(shí)現(xiàn)漢字轉(zhuǎn)拼音的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 純用NumPy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的示例代碼

    純用NumPy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的示例代碼

    這篇文章主要介紹了純用NumPy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • Pycharm設(shè)置去除顯示的波浪線方法

    Pycharm設(shè)置去除顯示的波浪線方法

    今天小編就為大家分享一篇Pycharm設(shè)置去除顯示的波浪線方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python中的turtle庫函數(shù)簡單使用教程

    python中的turtle庫函數(shù)簡單使用教程

    這篇文章主要介紹了python中的turtle庫函數(shù)簡單使用教程。本文通過圖片的形式給大家展示的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-07-07
  • PyCharm在win10的64位系統(tǒng)安裝實(shí)例

    PyCharm在win10的64位系統(tǒng)安裝實(shí)例

    給大家介紹一下在win10的64位系統(tǒng)中安裝PyCharm的操作過程以及需要注意的地方。
    2017-11-11
  • matlab繪制局部放大圖圖文教程

    matlab繪制局部放大圖圖文教程

    這篇文章主要給大家介紹了關(guān)于matlab繪制局部放大圖的相關(guān)資料,所謂局部放大即呈現(xiàn)子圖,以顯示局部細(xì)節(jié),需要的朋友可以參考下
    2023-07-07
  • python處理xml文件的方法小結(jié)

    python處理xml文件的方法小結(jié)

    這篇文章主要介紹了python處理xml文件的方法,結(jié)合實(shí)例形式總結(jié)分析了Python常見的xml文件處理技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-05-05
  • Python判斷兩個(gè)文件是否相同與兩個(gè)文本進(jìn)行相同項(xiàng)篩選的方法

    Python判斷兩個(gè)文件是否相同與兩個(gè)文本進(jìn)行相同項(xiàng)篩選的方法

    今天小編就為大家分享一篇關(guān)于Python判斷兩個(gè)文件是否相同與兩個(gè)文本進(jìn)行相同項(xiàng)篩選的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • django遷移文件migrations的實(shí)現(xiàn)

    django遷移文件migrations的實(shí)現(xiàn)

    這篇文章主要介紹了django遷移文件migrations的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python matplotlib坐標(biāo)軸設(shè)置的方法

    python matplotlib坐標(biāo)軸設(shè)置的方法

    本篇文章主要介紹了python matplotlib坐標(biāo)軸設(shè)置的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12

最新評(píng)論