1. 程式人生 > >eight

eight

form syn pen strong 文件中 utf-8 名稱 contain 原來

1、range():

下面這兩種用法的結果是一致的

print(range(100).__iter__())
print(iter(range(100)))

# <range_iterator object at 0x000001C62FCB8EF0>
# <range_iterator object at 0x000001C62FCB8EF0>

2、eval()和exec()

由下例可以看出來eval和exec都可以將引號去掉,但是eval是有返回值的,exec沒有返回值,只會輸出None

print(eval(‘1,2,3,4‘))  # (1,2,3,4)
print(eval(‘1+2-3+4‘))  # 4
print(exec(‘1+2-3+4‘))  # None
exec("print(‘1+2-3+4‘)")  # 1+2-3+4
eval("print(‘1+2-3+4‘)")  # 1+2-3+4

技術分享

3、compile 將字符串類型的代碼編譯。代碼對象能夠通過exec語句來執行或者eval()進行求值

參數說明:   

1. 參數source:字符串或者AST(Abstract Syntax Trees)對象。即需要動態執行的代碼段。  

2. 參數 filename:代碼文件名稱,如果不是從文件讀取代碼則傳遞一些可辨認的值。當傳入了source參數時,filename參數傳入空字符即可。  

3. 參數model:指定編譯代碼的種類,可以指定為 ‘exec’,’eval’,’single’。當source中包含流程語句時,model應指定為‘exec’;當source中只包含一個簡單的求值表達式,model應指定為‘eval’;當source中包含了交互式命令語句,model應指定為‘single‘。

codel=‘for i in range(0,10):print(i)‘
compilel=compile(codel,‘‘,‘exec‘)
exec(compilel)

# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9

#簡單求值表達式用eval
code1=‘1+2+3+4‘
compile=compile(code1,‘‘,‘eval‘)
print(eval(compile))
# 10
#交互語句用single
code=‘name=input("please input your name:")‘
compile=compile(code,‘‘,‘single‘)
name
# 運行結果
# Traceback (most recent call last):
#   File "C:/Pythonbc/課堂/內置函數.py", line 177, in <module>
#     name
# NameError: name ‘name‘ is not defined
code=‘name=input("please input your name:")‘
compile=compile(code,‘‘,‘single‘)
exec(compile)
name
# please input your name:alex

4、iterator():下面代碼中的兩個print的效果是一樣的,都是調用生成器,並從其中取值。

iterator=iter(range(100))
print(iterator.__next__())  # 0
print(next(iterator))  # 1

5、dir():判斷某個數據類型中有什麽用法。

print(dir([]))
# [‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘,
‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__gt__‘, ‘__hash__‘, ‘__iadd__‘, ‘__imul__‘, ‘__init__‘, ‘__init_subclass__‘,
‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__reversed__‘,
‘__rmul__‘, ‘__setattr__‘, ‘__setitem__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘append‘, ‘clear‘, ‘copy‘, ‘count‘, ‘extend‘, ‘index‘,
‘insert‘, ‘pop‘, ‘remove‘, ‘reverse‘, ‘sort‘]

查看某數據類型的用法有3種:

  1、ctrl +鼠標左鍵單擊:這是pycharm提供的方法

  2、help:會查看到所有的方法以及它的使用方法,但是不知道用法

  3、dir:查看到的只是方法名,這個方法適用於查看某方法是否在這個數據類型中

6、callcble():

def func():pass
a=1
print(callable(a))  # False 不可以調用
print(callable(print))  # True  可以調用
print(callable(func)) # True  可以調用

7、import():

  用法:import+模塊名

import time  # 時間
import time
for i in range(0,101,2):
     time.sleep(0.1)
     char_num = i//2      #打印多少個‘*‘
     per_str = ‘\r%s%% : %s\n‘ % (i, ‘*‘ * char_num) if i == 100 else ‘\r%s%% : %s‘%(i,‘*‘*char_num)
     print(per_str,end=‘‘, flush=True)
#100% : **************************************************
#這是一個進度條的代碼,調用time模塊來調節代碼運行的速度
import os  # 操作系統

8、文件操作方法:open()

  f=open(‘文件名‘,‘w‘,encoding=‘utf-8‘)

  打開模式:r、w、a、rb、wb、ab

  編碼:utf-8/gbk

9、buffering(緩存)

10、hash(哈希)

print(id(1))  # 1779414080
print(id(2))  # 1779414080
print(hash(‘hdhshd‘))  # 7061084334364224280
print(hash(123445))  # 123445
print(hash((1,2,3,4)))  # 485696759010151909

相同的內容的哈希結果是相同的

可用於:1、數據的存儲和查找;2、模塊:hashlib

判斷一個數據類型是否可以hash,在一個程序執行過程中,對同一個值的hash的結果總是不變的;多次執行,對同一個值的hash結果可能改變。

11、 print():

  def print(self,*args,sep=‘ ’,end=‘\n‘,file=None)

print(1,2,3,4,sep=‘/‘)  # 1/2/3/4
print(1,2,3,4,sep=‘*‘)  # 1*2*3*4
print(1,2,sep=‘,‘)  # 1,2

其中sep在print中默認為以空格來分隔,且在結尾的時候是有一個end的默認參數,傳的是\n(換行符)

print(‘abc\n‘)
print(2)
# abc
# 
# 2

在print中file的默認值是None,可以自己設定一個文件,如下所示,文件中存入了abc

f=open(‘a‘,‘w‘)
print(‘abc\n‘,file=f)   # abc被寫入了文件中
print(2)

# 2

進度條:其中\r:不論運行了多少,都要將光標移到最前面,相當於seek(0)。

import time
for i in range(0,101,2):
    time.sleep(0.1)
    char_num=i//2
    per_str = ‘\r%s%%:%s\n‘ % (i, ‘*‘ * char_num) if i == 100 else ‘\r%s%%:%s‘ % (i, ‘*‘ * char_num)
    print(per_str,end=‘‘,flush=True)

# 100%:**************************************************

12、 bool:只有True和False兩個值;可以與int、str之間之間相互轉換

print(bool(‘‘))  # False
print(bool(0))  # False
print(bool(‘a‘))  # True
print(bool(1))  # True 

13、int:整型,可以與bool、str之間相互轉換

print(int(False))  # 0
print(int(True))  # 1

14、float:浮點型(可以理解為帶小數點的數據)

15、abs:計算絕對值

print(abs(-24))  # 24

16、divmod:計算,並且返回除數和余數

print(divmod(35,4))   # (8,3)

17、round:保留小數點的位數,可自定義 round(number,ndigits)

print(round(3.1415926,3))  # 3.142 

18、pow:冪運算

print(pow(2,2))  # 4
print(pow(2,2,2))  # 0
print(pow(2,2,3))  # 1

19、sum:計算數據的和

print(sum([1,2,3,4,5,6]))  # 21

20、min:比較數據的大小,返回最小值min(iterable,key,default)

t=(-25,31,6,8)
print(min(t))  # -25
print(min(t,key=abs))  # 6
print(min((),default=0))  # 0

21、max:比較數據的大小,返回最大值max(iterable,key,default)

t=(-25,31,6,8)
print(max(t))  # 31
print(max(t,key=abs))  # 31
print(max((),default=0))  # 0 

22、list:列表,以[‘列表中的內容‘]的形式表現出來,可以對列表內的元素進行增刪改查,是可叠代對象,可強制轉換成元組tuple(list)

23、tuple:元組,以(‘元組中的內容‘)的形式表現出來,是可叠代對象,但元組內的元素不可變,可強制轉換成列表list(tuple)

24、reversed:返回的是叠代器,不改變原來的列表,在內存中額外開辟一個新的空間來存儲新的序列叠代器,這樣比較占內存,但是並不是在原來的列表上進行修改,這樣保留了原來的列表中的內容。

25、reverse:返回的值是None,是在原列表的基礎上對列表進行修改的,雖然節省了內存空間,但是改變了原列表中的內容。

26、bytes:

print(bytes(‘ab‘,encoding=‘utf-8‘)) # b‘ab‘

26、ascii:只要是ascii碼中的內容就打印出來,如果不是就轉換成\u

print(ascii(2))  # 2
print(ascii(‘a‘))  # ‘a‘
print(ascii(‘哇哈哈‘))  # ‘\u54c7\u54c8\u54c8‘

27、repr:用於%r格式化輸出

print(repr(2))  # 2
print(repr(‘wahaha‘))  # ‘wahaha‘
print(repr(2+4))  # 6
print(repr(‘q‘+‘a‘))  # ‘qa‘

28、locals:局部變量,作用域根據locals的使用地方來確定其使用範圍。

29、globals:全局變量,可在函數中使用globals來改變函數的使用範圍,但最好不要用,在使用globals改變變量的值的同時,全局變量中的變量值也會同時發生改變。

30、next:叠代器包含有用法。

31、iter:可叠代對象同時擁有next和iter用法。

32、callable:判斷是否為可叠代對象

def func():pass
a=1
print(callable(a))  # False
print(callable(print))  # True
print(callable(func))  # True

33、id:可以很快的找到某數據的存儲地址

print(id(1))  # 1888793664
print(id(2))  # 1888793696

eight