1.迭代器和生成器
迭代器獲取數(shù)據(jù)方法:next(迭代器)擒悬、for循環(huán)遍歷,數(shù)據(jù)來源:轉(zhuǎn)換内边、生成器
生產(chǎn)器: 就是迭代器
def 函數(shù)名():
yield 值
(表達式 for 變量 in 序列 if 條件語句)
補充: 三目運算符
"""
C中的三目運算符: 表達式?值1:值2 -- 判斷表達式的值是否為真谆棺,如果是整個運算的結(jié)果是值1,否則是值2
python的三目運算操作: 值1 if 表達式 else 值2 -- 判斷表達式的值是否為真罕袋,如果是整個運算的結(jié)果是值1改淑,否則是值2
"""
num = 11
result = '偶數(shù)' if num % 2 == 0 else '奇數(shù)'
print(result)
2.模塊
模塊就是py文件
import math
導入模塊中所有的內(nèi)容
from math import *
if name == 'main':
pass
包/庫就是文件夾
3.異常處理
"""
try:
需要捕獲異常的代碼段
except:
出現(xiàn)異常后對異常的處理代碼
finally:
不管try后面的代碼是否異常,異常是否被捕獲都執(zhí)行的代碼
"""
1.什么是類炫贤、什么是對象
"""
- 官方定義
類就是擁有相等功能和相同的屬性的對象的集合 -- 抽象的
對象就是類的實例 -- 具體 - 生活角度看類和對象
如果人是類溅固,余婷就是對象、駱昊也是對象
如果電腦是類兰珍,我桌上的這兩臺電腦就是對象
"""
2.類的聲明
"""
1)語法
class 類名:
類的內(nèi)容
2)說明
class - 聲明類的關(guān)鍵字
類名 - 標識符侍郭,不能是關(guān)鍵字
見名知義,采用駝峰式命名(采用通過單詞首字母大寫的方式來區(qū)分不同的單詞),首字母大寫
: - 固定寫法
類的內(nèi)容 - 主要包含: 類的說明文檔亮元、屬性(普通的變量)猛计、功能(函數(shù)/方法)
"""
3.對象怎么聲明
"""
對象 = 類() - 創(chuàng)建指定的類對應(yīng)的對象
"""
4.類中的方法
"""
- 什么是方法:聲明在類中的函數(shù)就叫方法
- 類中的方法有三種:對象方法、類方法爆捞、靜態(tài)方法
a. 對象方法: 直接聲明在類中的函數(shù)
有默認參數(shù)self奉瘤,通過對象調(diào)用的時候這個參數(shù)不用傳參,因為系統(tǒng)會自動將當前對象傳遞給self煮甥。
(self盗温,當前對象 - 誰調(diào)用self就指向誰,當前類的對象能做的事情self都能做)
通過類的對象來調(diào)用: 對象.對象方法()
b.類方法: 聲明函數(shù)前加@classmethod
有默認參數(shù)cls, 通過類調(diào)用的時候這個參數(shù)不用傳參,因為系統(tǒng)會自動將當前類傳遞給cls
(cls成肘,當前類 - 誰調(diào)用就指向誰卖局,當前類能做的事情cls都能做)
通過類來調(diào)用: 類.類方法()
c.靜態(tài)方法:聲明函數(shù)前加@staticmethod
沒有默認參數(shù)
通過類來調(diào)用: 類.靜態(tài)方法()
"""
聲明一個Person類
class Person:
"""人類"""
# =========屬性==========
# =========方法==========
# ===============對象方法============
def eat(self, food):
# self = p1, food = '面條'
# self = p2, food = '火鍋'
print('self:', self)
print('人吃'+food)
self.study('python')
def study(self, type):
# self = p1, type = 'python'
# self = p2, type = 'python'
print('學習'+type)
# ===============類方法================
@classmethod
def destroy(cls):
# cls = Person
# 通過cls創(chuàng)建對象
tp = cls() # tp = Person()
cls.func1() # Person.func1()
print('tp:', tp)
print('cls:', cls)
print('人類破壞環(huán)境')
@classmethod
def func1(cls):
# cls = Person
print('臨時類方法')
# ===============靜態(tài)方法================
@staticmethod
def beat_animal():
print('人類毆打小動物')
創(chuàng)建Person類的對象p1
p1 = Person()
p0 = p1
print(p1, p0)
p2 = Person()
print(p2)
對象調(diào)用對象方法
p1.eat('面條')
p1.study()
p2.eat('火鍋')
類調(diào)用類方法
print(Person)
Person.destroy()
類調(diào)用靜態(tài)方法
Person.beat_animal()
1.什么是init方法
init是類默認繼承的一個魔法方法,用來初始化類双霍; 本質(zhì)是對象方法砚偶,但是不需要程序員自己調(diào)用,會被自動調(diào)用洒闸。
通過類創(chuàng)建對象的時候(通過構(gòu)造方法創(chuàng)建對象)染坯,系統(tǒng)會自動調(diào)用類中的init方法,并且構(gòu)造方法中的實參會全部傳給init方法
創(chuàng)建對象的時候需不需要參數(shù),需要幾個參數(shù)丘逸,看這個類的init方法
(了解)聲明類的時候系統(tǒng)會自動給我們創(chuàng)建一個函數(shù)单鹿,這個函數(shù)的函數(shù)名和聲明的類的類名一樣,這個函數(shù)叫構(gòu)造方法。
函數(shù)中會先在內(nèi)存中開辟空間創(chuàng)建對象鸣个,然后用創(chuàng)建的對象去調(diào)用類的init方法羞反,最后才將對象返回
class Person:
def __init__(self, name, age):
print(self, name, age)
print('init方法')
# def Person(*args, **kwargs):
# t = 創(chuàng)建對象
# t.__init__(*args, **kwargs)
# return t
print('===========')
p1 = Person('yuting', 18)
print(p1)
print('===========')
p2 = Person('小明', age=20)
# ========模擬構(gòu)造方法和init的關(guān)系=========
def yt_init(name, age):
print('自己的init', name)
def yt_Person(*args, **kwargs):
# args = ('yuting',) kwargs={}
yt_init(*args, **kwargs)
yt_Person('xiaoming', 20)
yt_Person(name='張三', age=21)
yt_Person('xiaohua', age=9)
1.屬性
"""
類中的屬性分為:對象屬性和字段
1)字段: 直接聲明在類中變量就是字段;
字段要通過'類.字段'的方式來使用;
當屬性的值不會因為對象不同而不同,這種屬性就可以聲明成類的字段
2)對象屬性: 在init方法中囤萤,以'self.屬性 = 值'的形式聲明;
對象屬性要通過'對象.屬性'的方式來使用
當屬性的值會因為對象不同而不同的時候,使用對象屬性
"""
class Dog:
"""狗"""
# =========字段==========
numbers = 10
# =========對象屬性========
def __init__(self, name1, color1='黃色', gender1='公'):
self.name = name1
self.color = color1
self.gender = gender1
self.age = 0
使用類的字段
Dog.numbers = 100
print(Dog.numbers)
使用對象屬性
dog1 = Dog('大黃')
print(dog1.color)
print(dog1.gender)
print(dog1.age)
dog2 = Dog('財財', color1='灰色')
print(dog2.color)
print(dog2.gender)
print(dog2.age)
練習: 聲明一個學生類是趴,擁有屬性:名字涛舍、電話、年齡唆途、學號 擁有功能: 學習(打印XXX在學XXX)
class Student:
number = 1000
def __init__(self, name, tel='', age=0):
self.name = name
self.tel = tel
self.age = age
self.num = '0000'
def study(self, subject: str):
print(Student.number)
print(self.name+'在學'+subject)
stu = Student('小明', '182323332', 12)
stu.study('python')
stu1 = Student('小花', '182323332', 12)
stu1.study('H5')
寫一個矩形類富雅,有屬性:長和寬 方法:求面積、求周長
class Rect:
"""矩形"""
def __init__(self, length, width):
self.length = length
self.width = width
def area(self):
return self.length * self.width
def perimeter(self):
return (self.length + self.width)*2
r1 = Rect(100, 56)
print(r1.area(), r1.perimeter())
2.聲明類的時候方法的選擇(記赘匕帷)
"""
1)對象方法: 實現(xiàn)函數(shù)的功能需要對象屬性的時候没佑,就使用對象方法
2)類方法: 實現(xiàn)函數(shù)的功能不需要對象屬性,但是需要類的相關(guān)的操作,就使用類方法
3)靜態(tài)方法: 實現(xiàn)函數(shù)的功能既不需要對象屬性温赔,也不需要類相關(guān)的操作蛤奢,就使用靜態(tài)方法
"""
python中的對象屬性支持增、刪、改啤贩、查
class Dog:
def init(self, name):
self.name = name
self.age = 0
dog1 = Dog('大黃')
dog2 = Dog('財財')
1.查
"""
a. 對象.屬性 - 獲取指定對象指定屬性對應(yīng)的值, 如果屬性不存在會報錯
b. getattr(對象, 屬性名, 默認值) - 獲取指定對象指定屬性對應(yīng)的值待秃;
當屬性不存在有默認值的時候不報錯,返回默認值痹屹。沒有默認值的時候報錯
"""
print(dog1.name)
print(dog1.name2) # AttributeError: 'Dog' object has no attribute 'name2'
print(getattr(dog1, 'name2', 100))
2.增章郁、改
"""
a. 對象.屬性 = 值 - 當屬性不存在就添加屬性,當屬性存在修改屬性的值
b. setattr(對象, 屬性名, 值) - 當屬性不存在就添加屬性志衍,當屬性存在修改屬性的值
"""
dog1.gender = '雌'
print(dog1.gender)
dog1.name = '貝貝'
print(dog1.name)
a_name = 'color'
setattr(dog1, 'color', '白色')
print(getattr(dog1, 'color'))
setattr(dog1, 'name', '金金')
print(dog1.name)
# 3.刪
"""
a. del 對象.屬性
b. delattr(對象, 屬性名)
"""
del dog1.name
# print(dog1.name) # AttributeError: 'Dog' object has no attribute 'name'
delattr(dog1, 'age')
# print(dog1.age) # AttributeError: 'Dog' object has no attribute 'age'
# 注意: 對象屬性的增刪改查只針對單個對象
# print(dog2.gender) # AttributeError: 'Dog' object has no attribute 'gender'
print(dog2.name, dog2.age)