亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python基礎(chǔ)知識(shí)之函數(shù),類(lèi),模塊

 更新時(shí)間:2021年10月28日 11:34:43   作者:Mrwei_418  
今天小編就為大家分享一篇Python函數(shù),類(lèi),模塊,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

1、Function 函數(shù)

編程中,需要重復(fù)寫(xiě)的功能,可以包裝成一個(gè)函數(shù)

1)定義函數(shù)

定義函數(shù)之前,實(shí)現(xiàn)給一個(gè)字符串增加前綴和后綴的操作:

f1 = "f1"
f2 = "f2"
f1 += ".txt"
f1 = "my_" + f1
f2 += ".txt"
f2 = "my_" + f2
print(f1, f2)
my_f1.txt my_f2.txt

定義函數(shù)之后:

def modify_name(filename):
    filename += ".txt"
    filename = "my_" + filename
    print(filename)
modify_name("f1")
modify_name("f2")
my_f1.txt
my_f2.txt

上述函數(shù)里面用到了參數(shù),調(diào)用的時(shí)候需要進(jìn)進(jìn)行傳參數(shù),但有時(shí)也可以沒(méi)有參數(shù),eg:

def modify_name():
    filename = "f1"
    filename += ".txt"
    filename = "my_" + filename
    print(filename)
modify_name()
my_f1.txt

一個(gè)函數(shù)也可以擁有返回值,將函數(shù)處理后,可以將想要返回的結(jié)果返回

def modify_name(filename):
    filename += ".txt"
    filename = "my_" + filename
    return filename
new_filename = modify_name("f1")
print(new_filename)
my_f1.txt

2)參數(shù)設(shè)置

調(diào)用函數(shù)時(shí),如果函數(shù)有參數(shù),那么需要給函數(shù)傳參,函數(shù)本來(lái)的參數(shù)叫實(shí)參,傳入的參數(shù)叫實(shí)參,參數(shù)傳遞有以下幾種方式:

def f(x, a, b, c):
    return a*x**2 + b*x + c*1

print(f(2, 1, 1, 0))    # 忽略參數(shù)名,需要按順序一一對(duì)應(yīng)
print(f(x=2, a=1, b=1, c=0))    # 寫(xiě)上參數(shù)名,按名字傳參
print(f(a=1, c=0, x=2, b=1))    # 若用參數(shù)名,可以打亂順序傳參
6
6
6

另外,對(duì)于不是一直變化的參數(shù),可以給參數(shù)設(shè)置一個(gè)默認(rèn)值,如果設(shè)置了默認(rèn)值,傳參時(shí)可以不給改參數(shù)傳值,否則每個(gè)參數(shù)都要傳參成功才能調(diào)用

def f(x, a=1, b=1, c=0):
    return a*x**2 + b*x + c*1

print(f(2, a=2))
print(f(2))
10
6

Tip: 設(shè)置了默認(rèn)值的參數(shù)和未設(shè)置默認(rèn)值的參數(shù)要分開(kāi)放,也就是說(shuō)不可以將未設(shè)置默認(rèn)值的參數(shù)跟在設(shè)置了默認(rèn)值參數(shù)的后面

3)全局和局部變量

  • 全局變量(global):函數(shù)里外都能用(公用)
  • 局部變量(local):僅在函數(shù)內(nèi)使用(私用)
def modify_name():
    filename = "f1.txt"	# 這里就是一個(gè)局部變量
    print("local filename:", filename)
modify_name()
print("global filename:", filename) # 這里會(huì)報(bào)錯(cuò)
filename = "f1.txt"	# 這里便是一個(gè)全局變量
def modify_name():
    print("local filename:", filename)
modify_name()
print("global filename:", filename)
  • 全局變量和局部變量沖突時(shí),局部變量?jī)?yōu)先!!!
filename = "f1.txt"
def modify_name():
    filename = "f2.txt"
    print("local filename:", filename)
modify_name()
print("global filename:", filename)
local filename: f2.txt
global filename: f1.txt
  • 特殊情況:允許內(nèi)部來(lái)修改外部的值,必須使用global聲明,相當(dāng)于提出了一個(gè)申請(qǐng)
filename = "f1.txt"

def modify_name():
    global filename  # 提出申請(qǐng)
    filename = "f2.txt"
    print("local filename:", filename)

modify_name()
print("global filename:", filename)
local filename: f2.txt
global filename: f2.txt

2、Class類(lèi)

目的:為了描述一個(gè)或一類(lèi)具體的物體,eg:貓的特征,動(dòng)作等

1)定義class

使用class File來(lái)創(chuàng)建一個(gè)類(lèi),注意通常約定類(lèi)的名字要首字母大寫(xiě)。

然后使用my_file = File()來(lái)創(chuàng)建一個(gè)實(shí)例,每個(gè)實(shí)例都繼承了一個(gè)類(lèi)的基本屬性

class File:
    def __init__(self):
        self.name = "f1"
        self.create_time = "today"

my_file = File()
print(my_file.name)
print(my_file.create_time)
f1
today
  • 其中 self 是作為類(lèi)自己的一個(gè)索引,不管你在定義類(lèi)的時(shí)候,想要獲取這個(gè)類(lèi)的什么屬性或功能,都可以通過(guò)self來(lái)獲取。
  • __init__():創(chuàng)建一個(gè)實(shí)例的時(shí)候,類(lèi)都會(huì)自動(dòng)進(jìn)行一次初始化,即運(yùn)行一遍_(kāi)_init__()函數(shù)
  • 修改屬性的值:(但這樣修改的值,僅對(duì)當(dāng)前實(shí)例有效)
my_file.name = "new_name"
print(my_file.name)
new_name

2)class的功能

  • __init__():也可以對(duì)該函數(shù)進(jìn)行傳參:
class File:
    def __init__(self, name, create_time="today"):
        self.name = name
        self.create_time = create_time

my_file = File("my_file")
print(my_file.name)
print(my_file.create_time)
my_file
today
  • 還可以定義更多的功能,比如重命名等
class File:
    def __init__(self, name, create_time="today"):
        self.name = name
        self.create_time = create_time
    def change_name(self, new_name):
        self.name = new_name

my_file = File("my_file")
my_file.change_name("new_name")
print(my_file.name)
new_name
  • 而且類(lèi)的功能也可以有返回值
class File:
    def __init__(self, name, create_time="today"):
        self.name = name
        self.create_time = create_time
    def get_info(self):
        return self.name + " is created at " + self.create_time

my_file = File("my_file")
print(my_file.get_info())
my_file is created at today

3)繼承

  • 倆個(gè)類(lèi)分開(kāi)寫(xiě),eg:
class Video:
    def __init__(self, name, window_size=(1080, 720)):
        self.name = name
        self.window_size = window_size
        self.create_time = "today"
        
class Text:
    def __init__(self, name, language="zh-cn"):
        self.name = name
        self.language = language
        self.create_time = "today"

可以發(fā)現(xiàn),這倆個(gè)類(lèi)是有共性的,比如都有name,和create_time

所以,可以編寫(xiě)一個(gè)底層類(lèi),使得這倆個(gè)類(lèi)繼承底層類(lèi),從而減少了類(lèi)之間的共有屬性/功能的重復(fù)開(kāi)發(fā)?。?!

一個(gè)類(lèi)可以繼承另一個(gè)類(lèi),從而使得這個(gè)類(lèi)成為子類(lèi),被繼承的類(lèi)為父類(lèi)

子類(lèi)可以繼承父類(lèi)的功能/功能,而且子類(lèi)還可以重定義父類(lèi)的功能

class File:
    def __init__(self, name, create_time="today"):
        self.name = name
        self.create_time = create_time
    def get_info(self):
        return self.name + " is created at " + self.create_time

class Video(File):
    def __init__(self, name, window_size=(1080, 720)):
        # 將共有屬性的設(shè)置導(dǎo)入File父類(lèi)
        super().__init__(name=name, create_time="today")
        self.window_size = window_size

class Text(File):
    def __init__(self, name, language="zh-cn"):
        super().__init__(name=name, create_time="today")
        self.language = language
    # 也可以在子類(lèi)中復(fù)用父類(lèi)功能
    def get_more_info(self):
        return self.get_info() + ", using language of " + self.language

v = Video("my_video")
t = Text("my_text")
print(v.get_info())  # 調(diào)用父類(lèi)功能
print(t.create_time)  # 調(diào)用父類(lèi)的屬性
print(t.language)  # 調(diào)用自己的屬性
print(t.get_more_info())  # 調(diào)用自己復(fù)用父類(lèi)的功能
my_video is created at today
today
zh-cn
my_text is created at today, using language of zh-cn

4)私有屬性和功能

  • 私有:_一個(gè)下劃線開(kāi)頭,弱隱藏,不想讓別人用,但別人在必要情況下還是可以用的
  • 私有:__倆個(gè)下劃線開(kāi)頭,強(qiáng)隱藏,不讓別人使用
class File:
    def __init__(self):
        self.name = "f1"
        self.__deleted = False  # 不讓別人使用這個(gè)變量
        self._type = "txt"  # 不想別人使用這個(gè)變量
    def delete(self):
        self.__force_delete()
    def __force_delete(self):   # 不讓別人使用這個(gè)功能
        self.__deleted = True
        return True
    def _soft_delete(self):  # 不想讓別人使用這個(gè)功能
        self.__force_delete()  # 雖然是強(qiáng)隱藏,但是可以在內(nèi)部隨便調(diào)用
        return True

f = File()
print(f._type)  # 可以拿到值,但是會(huì)有⚠️
print(f._soft_delete())  # 可以調(diào)用,但是會(huì)有⚠️
print(f.__deleted)  # 會(huì)直接報(bào)錯(cuò)
print(f.__force_delete)  # 會(huì)直接報(bào)錯(cuò)

5)特殊方法

定義 含義
def __init__() 初始化實(shí)例
def __repr__() 字符串的“官方”表現(xiàn)形式
def __str__() 字符串的“非正式”值
def __iter__() 遍歷某個(gè)序列
def __next__() 從迭代器中獲取下一個(gè)值

3、Module模塊

Moudel主要是為一個(gè)相對(duì)比較大的工程,涉及到多個(gè)文件之間的互相調(diào)用關(guān)系。

  • 對(duì)于一個(gè)項(xiàng)目來(lái)說(shuō),它需要去實(shí)現(xiàn)很多功能,這時(shí)候,如果可以把某一個(gè)或者某一類(lèi)功能分類(lèi)寫(xiě)到了一個(gè)文件之中,在合并的時(shí)候,我不便不需要知道文件中的代碼具體什么,我只需要調(diào)用你給的這個(gè)文件中的功能就可以!也
  • 就是說(shuō),作為你所給文件中的功能的使用者,我不關(guān)心你實(shí)現(xiàn)功能的代碼,我只關(guān)系我可以使用函數(shù)調(diào)用到你這個(gè)功能就好
# file.py
def create_name():
  return "new_file.txt"

eg: 比如上述file.py文件,實(shí)現(xiàn)了create_name的功能,然而作為這個(gè)功能的使用者,我不需要去了解這個(gè)功能所使用的代碼,我只關(guān)心如何調(diào)用使用這個(gè)功能

1)引用module

比如新建了一個(gè)me.py,需要在這個(gè)文件之中引用file.py中的create_name()的功能

# me.py
import file
print(file.create_name())
new_file.txt

或者也可以這樣調(diào)用

# me.py
import file as f1
print("f1:", f1.create_name())
class File:
  def create_name(self):
    return "new_file.txt"
f2 = File()
print("f2:", f2.create_name())
f1: new_file.txt
f2: new_file.txt

可以發(fā)現(xiàn),這和類(lèi)功能調(diào)用有著非常大的相似之處?。?!

還有更多的引用方式:

# me.py
from file import create_name
print(create_name())
new_file.txt

假設(shè)file.py中還有一個(gè)函數(shù)create_time()

# me.py
from file import create_name, create_time
print(create_name())
print(create_time())
new_file.txt
today

如何file.py中函數(shù)太多,記不清,那么可以如此引用:

# me.py
# 第一種
import file
print("1", file.create_name())
#第二種
from file import *
print("2", create_name())
print("2", create_time())

2)大項(xiàng)目的模塊管理

在正規(guī)的module中,我們常會(huì)看到一個(gè)__init__.py文件,就像class里的def __init__(self),可以在里面寫(xiě)上如何初始化你的files目錄,也可以設(shè)定目錄中各元素的關(guān)系。

complex

# files/__init__.py
from .video import get_video_size

設(shè)置好__init__.py后,就可以直接從files里import get_video_size這個(gè)屬于video.py的功能了

# me.py
from files import get_video_size
print(get_video_size())

但和video.py同級(jí)的text.py就無(wú)法通過(guò)import方式獲取到text.py中的功能,因?yàn)槲丛趂iles/__init__.py中聲明

# me.py
from files import create_name

如果不在files/__init__.py中聲明,但還想調(diào)用,則可以使用:

# me.py
import files.text
print(files.text.create_name)
# 或者
from files import text
print(text.create_name)

總結(jié)

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

相關(guān)文章

  • python實(shí)現(xiàn)打印類(lèi)的所有屬性和方法

    python實(shí)現(xiàn)打印類(lèi)的所有屬性和方法

    這篇文章主要介紹了python實(shí)現(xiàn)打印類(lèi)的所有屬性和方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python多線程與多進(jìn)程相關(guān)知識(shí)總結(jié)

    Python多線程與多進(jìn)程相關(guān)知識(shí)總結(jié)

    進(jìn)程(process)和線程(thread)是操作系統(tǒng)的基本概念,是操作系統(tǒng)程序運(yùn)行的基本單元,本文簡(jiǎn)要介紹進(jìn)程和線程的概念以及Python中的多進(jìn)程和多線程.需要的朋友可以參考下
    2021-05-05
  • python實(shí)現(xiàn)靜態(tài)服務(wù)器

    python實(shí)現(xiàn)靜態(tài)服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)靜態(tài)服務(wù)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 在Django的模板中使用認(rèn)證數(shù)據(jù)的方法

    在Django的模板中使用認(rèn)證數(shù)據(jù)的方法

    這篇文章主要介紹了在Django的模板中使用認(rèn)證數(shù)據(jù)的方法,Django是最具人氣的Python web開(kāi)發(fā)框架,需要的朋友可以參考下
    2015-07-07
  • python實(shí)現(xiàn)簡(jiǎn)單圖片物體標(biāo)注工具

    python實(shí)現(xiàn)簡(jiǎn)單圖片物體標(biāo)注工具

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單圖片物體標(biāo)注工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 分享8?個(gè)常用pandas的?index設(shè)置

    分享8?個(gè)常用pandas的?index設(shè)置

    這篇文章主要介紹了分享8?個(gè)常用pandas的?index設(shè)置,pandas?中的?index?是行索引或行標(biāo)簽。行標(biāo)簽可以說(shuō)是?pandas?的靈魂一簽,支撐了?pandas?很多強(qiáng)大的業(yè)務(wù)功能,比如多個(gè)數(shù)據(jù)框的?join,?merge?操作,自動(dòng)對(duì)齊等,下面來(lái)看看文章得具體介紹吧
    2021-12-12
  • python 虛擬環(huán)境的創(chuàng)建與使用方法

    python 虛擬環(huán)境的創(chuàng)建與使用方法

    本文先介紹虛擬環(huán)境的基礎(chǔ)知識(shí)以及使用方法,然后再深入介紹虛擬環(huán)境背后的工作原理,需要的朋友可以參考下
    2021-06-06
  • Python基于高斯消元法計(jì)算線性方程組示例

    Python基于高斯消元法計(jì)算線性方程組示例

    這篇文章主要介紹了Python基于高斯消元法計(jì)算線性方程組,結(jié)合實(shí)例形式分析了Python高斯消元法針對(duì)方程組求解的相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • tensorflow識(shí)別自己手寫(xiě)數(shù)字

    tensorflow識(shí)別自己手寫(xiě)數(shù)字

    這篇文章主要為大家詳細(xì)介紹了tensorflow識(shí)別自己手寫(xiě)數(shù)字,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Pycharm及python安裝詳細(xì)教程(圖解)

    Pycharm及python安裝詳細(xì)教程(圖解)

    這篇文章主要介紹了Pycharm及python安裝詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-07-07

最新評(píng)論