-
#Python實例屬性的初始化
在定義 Person 類時,可以為Person類添加一個特殊的__init__()方法,當(dāng)創(chuàng)建實例時,__init__()方法被自動調(diào)用,我們就能在此為每個實例都統(tǒng)一加上以下屬性:
class Person(object):
? ?def __init__(self, name, sex, age):
? ? ? ?self.name = name
? ? ? ?self.sex = sex
? ? ? ?self.age = age
__init__() 方法的第一個參數(shù)必須是 self(也可以用別的名字,但建議使用習(xí)慣用法),后續(xù)參數(shù)則可以自由指定,和定義函數(shù)沒有任何區(qū)別。
定義類后,就可以相應(yīng)的實例化對象了,需要注意的是,在實例化的時候,需要提供除self以外的所有參數(shù)。
查看全部 -
在Python中,通過class關(guān)鍵字定義一個類
類名以大寫字母開頭
定義的三種方法:
class Person: ?pass
class Person(): pass
class Person(object): ?pass
定義了類之后,就可以對類進(jìn)行實例化了,實例化是指,把抽象的類,賦予實物的過程
創(chuàng)建實例使用類名+()
class Person(object): ?pass?
xiaohong = Person()
查看全部 -
#8-11 Python編寫有參數(shù)的decorator? ----------------------不會也不熟練
#上一節(jié)的@performance只能打印秒,請給 @performace 增加一個參數(shù),允許傳入's'或'ms':
import time
from functools import reduce
def performance(unit):
? ?def performance_decorator(f):
? ? ? ?def wrapper(*args,**kwargs):
? ? ? ? ? ?start_t=time.time()
? ? ? ? ? ?result= f(*args,**kwargs)
? ? ? ? ? ?stop_t=time.time()
? ? ? ? ? ?#interval=(stop_t-start_t) if unit=='s' else (stop_t-start_t)*1000
? ? ? ? ? ?interval = (stop_t-start_t) * 1000 if unit == 'ms' else (stop_t-start_t) ? #這種在后面加if...else的寫法以前少見,多看看
? ? ? ? ? ?print('call {}() in {}{}'.format (f.__name__, interval,unit))
? ? ? ? ? ?return result
? ? ? ?return wrapper
? ?return performance_decorator
@performance('ms')
def factorial(n):
? ?time.sleep(1)
? ?return reduce(lambda x,y:x*y,range(1,n+1))
print(factorial(10))
# print('call %s() in %f()()' % (f.__name__, (start_t - stop_t),unit)) #這種寫法有問題
# TypeError: not all arguments converted during string formatting 不是所有的參數(shù)在字符串格式化期間轉(zhuǎn)換
# 輸出結(jié)果
# 當(dāng)unit=ms時--> 1018.0001258850098ms
# 當(dāng)unit=s時-->1.0s查看全部 -
#8-10 Python編寫無參數(shù)的decorator ? ? ? ---------------------------------------------------沒學(xué)會--------------------
#Python的 decorator 本質(zhì)上就是一個高階函數(shù),它接收一個函數(shù)作為參數(shù),然后,返回一個新函數(shù)
#功能:使用裝飾器可以對已有的函數(shù)增加新的功能,避免多次編寫相同功能的函數(shù) ? ? ---開放封閉原則
#什么是裝飾器?定義一個函數(shù),該函數(shù)可為其他函數(shù)添加額外的功能。
#何時用裝飾器? 需要在不修改被裝飾對象源代碼及其調(diào)用方式時,為被裝飾對象添加額外的功能
#被裝飾的函數(shù)的名字會被當(dāng)作參數(shù)傳遞給裝飾函數(shù)。裝飾函數(shù)執(zhí)行它自己內(nèi)部的代碼后,會將它的返回值賦值給被裝飾的函數(shù)。
#只能放在被裝飾的函數(shù)的上方最近處,不要空行!?。。。。。。。?!
#自己的理解:只要用裝飾符@XXX,就可以給被裝飾對象添加額外的功能了,而且似乎語法結(jié)構(gòu)很相似?--應(yīng)該是有模板的,模板類似下文
'''
def outter(func):
? ?def wrapper(*args,**kwargs): ? ? ? ?#自適應(yīng)任何參數(shù)定義的函數(shù):利用Python的 args 和 *kwargs,保證任意個數(shù)的參數(shù)總是能正常調(diào)用:
? ? ? ?#1、調(diào)用原函數(shù)
? ? ? ?#2、增加的新功能
? ? ? ?res=func(*args,**kwargs)
? ? ? ?return res
? ?return wrapper
#使用時
@outter
def func():
? ?pass
'''
'''
from functools import reduce
def log(f):
? ?def fn(x):
? ? ? ?print('call ' + f.__name__ + '()...')
? ? ? ?return f(x)
? ?return fn
@log
def factorial(n):
? ?return reduce(lambda x,y: x*y, range(1, n+1))
print(factorial(10)) ? ?# 輸出結(jié)果: ?call factorial()...
? ? ? ? ? ? ? ? ? ? ? ?# ? ? ? ? ? 3628800
'''
#@裝飾器名字,等價于f=performance(f)
#請編寫一個@performance,它可以打印出函數(shù)調(diào)用的時間。
import time
from functools import reduce
def performance(f):
? ?def fn(*args, **kw):
? ? ? ?t1 = time.time()
? ? ? ?r = f(*args, **kw)
? ? ? ?t2 = time.time()
? ? ? ?print('call %s() in %fs' % (f.__name__, (t2 - t1)))
? ? ? ?return r
? ?return fn
@performance
def factorial(n):
? ?return reduce(lambda x,y: x*y, range(1, n+1))
print(factorial(10))
# 輸出結(jié)果
# call factorial() in 0.000000s
# 3628800'''
#請編寫一個@performance,它可以打印出函數(shù)調(diào)用的時間。
import time
from functools import reduce
def performance(f):
? ?def fn(*args,**kwargs):
? ? ? ?start_t = time.time()
? ? ? ?#print(start_t)
? ? ? ?result = f(*args, **kwargs)
? ? ? ?#這里result放置的位置有區(qū)別嗎?放在這或者更往下的位置stop_t下面,放在這里才是對的,否則其實被裝飾函數(shù)里寫了time.sleep(1)也不生效,start_t和stop_t的時間是一樣的,所以意思是被裝飾的函數(shù)體其實會在這里被調(diào)用嗎?
? ? ? ?stop_t = time.time()
? ? ? ?#print(stop_t)
? ? ? ?print('call %s() in %fs' %(f.__name__, (start_t-stop_t)))??????????#這個格式化寫法需要多看看,之前不熟悉
? ? ? ?return result
? ?return fn
@performance
def factorial(n):
? ?time.sleep(1)
? ?return reduce(lambda x,y:x*y,range(1,n+1))
print(factorial(10))'''
查看全部 -
#這道題答案很簡單,為什么自己花費(fèi)了時間還是做不出來呢??思路接近,但是還是有不對的,如先轉(zhuǎn)成小寫再比較。最開始想的是只有str類型有l(wèi)ower方法,所以定義函數(shù)時,返回的是str類型
# 8-6 Python自定義排序函數(shù)
# 對字符串排序時,有時候忽略大小寫排序更符合習(xí)慣。請利用sorted()高階函數(shù),實現(xiàn)忽略大小寫排序的算法。
# 輸入:['bob', 'about', 'Zoo', 'Credit']
# 輸出:['about', 'bob', 'Credit', 'Zoo']
def is_lower(x):
? ?return str(x).lower()
L=['bob', 'about', 'Zoo', 'Credit']
Llower = list(is_lower(L))
print(type(Llower))
result=sorted(Llower) ? ?#為什么用sorted(Llower)排序的時候,是按照字符分割后的結(jié)果進(jìn)行排序的呢??
print(result)#參考答案如下
def k(item):
? ?return item.lower()
sorted(['bob', 'about', 'Zoo', 'Credit'], key=k)查看全部 -
#請利用filter()過濾出1~100中平方根是整數(shù)的數(shù),即結(jié)果應(yīng)該是:1, 4, 9, 16, 25, 36, 49, 64, 81, 100。
import ?math
def f(x):
? ?r = int(math.sqrt(x))
? ?return r*r == x
L= [i for i in range(1,101)]
for item in filter(f,L):
? ?print(item)
#題目對我來說的難點(diǎn):1、平方根是整數(shù)的數(shù) 該怎么表示(sqrt) ?
2、#1~100該怎么表示 (range(1,101)),最開始沒想到什么簡便的方法,于是想到了
# 利用推導(dǎo)式來賦值,其實這里直接用range(1,101)即可。
#原理:某個數(shù)的平方還在這個列表里 但是該怎么表示呢?不能用成員運(yùn)算符in,否則會報錯,應(yīng)該用r*r==x這種形式。
# return的時候究竟返回的是哪個值這個還需要多了解查看全部 -
# Python的reduce()函數(shù)
# Python內(nèi)置了求和函數(shù)sum(),但沒有求積的函數(shù),請利用recude()來求積
# 輸入:[1, 3, 5, 7, 9]
# 輸出:13579的結(jié)果
from functools import reduce
def f(x,y):
? ?return x*y
result= reduce(f,[1,3,5,7,9])
print(result)
#輸出結(jié)果應(yīng)該是945吧?為什么題目說的是13579的結(jié)果。。。查看全部 -
def f(x):
? ? return? str.capitalize(x)
name_list=[]
for name in map(f,['alice', 'BOB', 'CanDY']):
? ? name_list.append(name)
print(name_list)
#<method 'capitalize' of 'str' objects> ? 沒有給capitalize加參數(shù)()導(dǎo)致的
#capitalize() 將字符串的第一個字母變成大寫,其他字母變小寫#我的答案特意將輸出結(jié)果轉(zhuǎn)成了列表形式,參考答案沒有,是str類型
#以下是參考答案
def format_name(s):
? ?return s[0].upper() + s[1:].lower()
for item in map(format_name, ['alice', 'BOB', 'CanDY']):
? ?print(item)查看全部 -
python3的語法中,class父類是可以不用寫object
此處為python2的語法
查看全部 -
把count改為私有__count,這樣實例變量在外部無法修改__count:
????????????私有化就是在外部無法訪問,只能在類的內(nèi)部可以進(jìn)行訪問
查看全部 -
初始方法一init _-
查看全部 -
cat.name='kitty'
cat.age='1'
print(cat.name)
Print(cat.age)
查看全部 -
Class Animals(object): pass cat=Animals () dog=Animals
查看全部 -
類-屬性→實例
人→姓名→小紅查看全部 -
isinstance()內(nèi)置函數(shù)用于判斷一個對象是否是一個已知的類型,類似type(),區(qū)別是考慮繼承關(guān)系。? ? ?語法:isinstance(object, classinfo);
object -- 實例對象。
classinfo -- 可以是直接或間接類名、基本類型或者由它們組成的元組。
如果對象的類型與參數(shù)二的類型(classinfo)相同則返回 True,否則返回 False。
查看全部
舉報