python成長之路 第四天

2022-08-24 21:06:12 字數 4418 閱讀 1501

內建函式:

callable:檢視物件是否能被呼叫(物件是函式的話能被呼叫)

#callable

def f1():

pass

f2="a"

print(callable(f1))

print(callable(f2))

#chr() 將ascii碼轉換成對應的字元

#ord() 相反

print(chr(65))

print(ord("b"))

生成乙個6位的隨機驗證碼:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import random

li=for i in range(6):

r=random.randrange(0,5)

if r == 2:

temp=random.randrange(0,10)

elif r == 4:

temp=random.randrange(97,123)

k=chr(temp)

else:

temp=random.randrange(65,91)

k=chr(temp)

print("".join(li))

v67dj2a

compile()  將字串,編譯成python**

exec()   執行   比eval功能更強大,直接執行python**或者字串(如果接收的是字串的話,內部會執行compile),沒有返回值

eval()    執行   主要是用來執行表示式的,有返回值

python直譯器執行檔案要經過以下幾個步驟:

2.python直譯器把  字串—》編譯—》特殊**   compile完成

編譯模式:

single:編譯成單行的python程式

eval:編譯成表示式

exec:編譯成和python**一模一樣的東西

with open("zy.py","r",encoding="utf8") as f:

r = compile(f.read(),"","exec")

exec(r)

bbdfji

zy.py是上面的6位隨機驗證碼程式,這個就模擬了python直譯器的執行過程

s = "print(123)"

r = compile(s,"","exec")

print(r)

print(type(r))

exec(r)

at 0x0000000000802db0, file "", line 1>

123

s = '''

print(123)

print(456)

'''r = compile(s,"","single")

exec(r)

traceback (most recent call last):

file "c:/users/administrator/pycharmprojects/untitled/day4.py", line 14, in 

r = compile(s,"","single")

file "", line 2

print(123)

^syntaxerror: multiple statements found while compiling a single statement

s = '''

print(123)

print(456)

'''r = compile(s,"","exec")

exec(r)

123456

print(eval("2+3"))

a="[1,2,3,4]"

li=eval(a)

print(type(li))

b=''

dic=eval(b)

print(type(dic))

5delattr,getattr,setattr,hasattr  反射  以後講

dir()  快速檢視乙個物件提供什麼功能,不顯示功能詳細

help()  顯示功能詳細   

divmod()  

#divmod() 得到商和餘數,返回值是元組

#共97 每頁顯示10 總共多少頁

print(divmod(97,10))

n1, n2 = divmod(97,10)

print("n1",n1)

print("n2",n2)

(9, 7)

n1 9

n2 7

物件是類的例項 則true

isinstance()  

#isinstance() 判斷物件是否是某個類的例項

s="alex"

r=isinstance(s,list)

print(r)

false

filter(函式,可迭代的物件)

def f1(a):

if a>22:

return true

li=[11,22,33,44,55]

ret = filter(f1,li)

print(ret)

print(list(ret))

[33, 44, 55]

filter和lambda組合:

li=[11,22,33,44,55]

ret = filter(lambda a: a > 33,li)

print(list(ret))

[44, 55]

map(函式,可迭代物件),對可迭代物件的每個元素都進行處理

li=[11,22,33,44,55]

def f(a):

return a+100

ret = map(f,li)

print(ret)

print(list(ret))

[111, 122, 133, 144, 155]

li=[11,22,33,44,55]

ret = map(lambda a: a+100 , li)

print(ret)

print(list(ret))

[111, 122, 133, 144, 155]

filter:函式返回true 則元素新增到結果中

map: 將函式返回值新增到結果中

name = "alex"

def show():

a=123

print(globals())

print(locals())

show()

如果乙個字串是字典或者列表等形式的,一定是單引號在外邊,雙引號在裡面

裝飾器:

@ + 函式名

功能:1.自動執行outer函式並且將其下面的函式名f1當作引數傳遞

2.將outer函式的返回值,重複賦值給f1

詳細過程:

1. 將outer函式加載入記憶體

2. 執行@outer  將函式名f1傳給func(func=原f1),執行outer

3. 將inner函式加載入記憶體

4. 將outer函式的返回值inner,重新賦值給f1,(f1=inner)

5. 當呼叫f1時,就執行inner(),inner中的func=原f1

適用場景:

主要是許可權控制

def outer(func):

def inner(*args,**kwargs):

print("before")

ret = func(*args,**kwargs)

print("after")

return ret

return inner

@outer

def f1(aa):

print("f1")

return aa

@outer

def f2(*args,**kwargs):

print("f2")

for index,items in enumerate(args):

print(index,"-"*5,items)

for k in kwargs:

print(k,"-"*5,kwargs[k])

f2(1,2,3,a=1,b=2,c=3)

before

f20 ----- 1

1 ----- 2

2 ----- 3

b ----- 2

c ----- 3

a ----- 1

after

成長記第四天

關於檔案的處理可以分成四種 1.write 寫入 2.read 讀取 在讀檔案的時候我們可以進行讀整個檔案 hj open c users miss desktop 檔名.txt r 執行後在shell介面輸入hj.read 後,再按回車鍵,就可以看到你的文字檔案了 但也可以進行讀取每一行的操作 h...

c 學習之路(第四天)

溫習一下記憶體分布模型 c 在執行 的時候。將記憶體大致劃分為4個區域 區 文字區 存放 的 二進位制 作業系統管理 全域性區 存放全域性變數和靜態變數 堆 由程式設計師分配釋放 棧 作業系統分配釋放 靜態成員是指宣告為static的類成員在類的範圍內所有物件共享某個資料。靜態成員函式只能訪問靜態資...

c 自學之路第四天

一 筆記 1.語法 public enum 列舉名 public 訪問修飾符,公開得公共的,哪都可以訪問 enum 關鍵字,宣告列舉的的關鍵字 列舉宣告到命名空間下面 2.ctrl k d 快速對齊 ctrl z 撤銷 ctrl s 儲存 ctrl j 快速彈出智慧型提示 shift end shi...