日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

python之内置函数(一)

發布時間:2023/12/29 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 python之内置函数(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、內置函數一

1、內置函數總覽

內置函數
abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() __import__()
complex() hasattr() max() round()
delattr() hash() memoryview() set()

2、作用域相關 ******

globals() :返回一個字典(包含全部的全局變量)locals() : 返回一個字典(包含的是當前作用域的所有變量)

b = 2
a = 3
print(globals())
print(locals())
# 結果:這兩個結果一樣,因為都是在全局執行的。


def fun():
    a = 3
    b = 2
    print(globals())
    print(locals())
fun()
# 結果:
globals():
{'__name__': '__main__', '__doc__': None, '__package__': None, 
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000228CB787748>, 
'__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 
'__file__': 'E:/OldBoy/Knight/PythonProject/day13/t2.py', '__cached__': None, 'b': 2, 'a': 3, 
'fun': <function fun at 0x00000228CB351E18>}

locals():{'b': 2, 'a': 3}

3、字符串類型代碼的執行:eval,exec,compile (不建議使用 ***)

eval: 執行字符串類型的代碼,并返回最終結果
s1 = '1+2+3+4+5'
print(eval(s1),type(eval(s1)))  #15 <class 'int'>


s2 = "{'name':'xiaoming'}"
print(eval(s2),type(eval(s2)))  #{'name': 'xiaoming'} <class 'dict'>


s3 = 'print(666)'
eval(s3)   # 666
print(eval(s3))  # 666 None(執行s3里面的代碼沒有返回值,就返回None)

exec:執行字符串類型的代碼,不返回結果(代碼流)
s3 = 'print(666)'
exec(s3)  #666(沒有返回值的代碼流可用exec())


s4 = '''for i in range(10):
    print(i)
'''
exec(s4) # 0 1 2 3 4 5 6 7 8 9
eval(s4) # 報錯

s1 = '1+2+3+4+5'
print(eval(s1),type(eval(s1)))  #15 <class 'int'>
print(exec(s1))  #None(有返回值不能用exec)


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'。 例子: #流程語句使用exec s5 = 'for i in range(5):print(i)' compile1 = compile(s5,'','exec') exec(compile1) 結果:0 1 2 3 4 #簡單求值表達式用eval s5 = '1*2*3*4' compile2 = compile(s5,'','eval') print(eval(compile2)) 結果:24 #交互語句用single s5 = 'name = input("please input your name:")' compile3 = compile(s5,'','single') exec(compile3) #運行后會讓用戶進行輸入,please input your name: print(name) #在exec(compile3)運行前沒有值,運行后,值為用戶輸入的值。

注意:有返回值的字符串形式的代碼用eval,沒有返回值的字符串形式的代碼用exec,一般不用compile。
但是!一般不推薦使用這幾個方法,為什么呢?
舉個栗子:
  在工作中,別人發給你一個文本文件,你讀文件的時候,讀出來的都是字符串吧,那么就可以使用這三個方法,
但是,一旦你使用了這幾個方法,它立馬就執行了,你想過沒有,如果別人在傳送文件給你的時候,你的文件被
黑客截取了,植入了病毒,再發回給你,那你使用eval,exec不就把病毒也讀取了嗎?

4、輸入輸出相關 input(),print() *****

input:函數接受一個標準輸入數據,返回為string類型。
print:打印輸出。

print的參數分析:print(self, *args, sep=' ', end='
', file=None)
1,*args:可接收多個位置參數
2,sep:打印多個值之間的分隔符,默認為空格
3,end:每一次打印的結尾,默認為換行符
4,file: 默認是輸出到屏幕,如果設置為文件句柄,輸出到文件

1,*args:可接收多個位置參數
print('666') # 666
print(1,2,3,4) # 1 2 3 4
print(*[1,2,3]) # 1 2 3
拓展:

def func1(*args,**kwargs): #在函數的定義 *參數 代表聚合。
  print(*args) #args=(1,2,3,4)這里的*args不是在函數的定義中,
         #所以代表的是(*(1,2,3,4)) 打散 結果輸出:1,2,3,4
  print(args) #args是一個元組,輸出(1, 2, 3, 4)
  print(**kwargs) #print(name='xiaoming',age=1000) print方法中沒有**kwargs
          #不能接收多個關鍵字參數,所以這里會報錯。
  print(kwargs) #這里的kwargs是一個字典,print輸出一個字典:{'name': 'xiaoming', 'age': 1000}
func1(1,2,3,4,name='xiaoming',age=1000)

2,sep:打印多個值之間的分隔符,默認為空格
print(1,2,3,sep='|') # 1|2|3|4

3,end:每一次打印的結尾,默認為換行符
print(11,end=' ')
print(22)
結果:11 22

4,file: 默認是輸出到屏幕,如果設置為文件句柄,輸出到文件
f = open('t1',encoding='utf-8',mode='w')
print(666,'777','888',file=f)

5、內存相關 hash id ***

hash:獲取一個對象(可哈希對象(不可變類型):int,str,Bool,tuple)的哈希值。
id:獲取該對象的內存地址。

print(hash('name')) # -163295680327498572
print(hash('name1')) # 9065259785983334233
print(hash(123)) # 123
print(hash(100000)) # 100000
print(hash(True)) # 1
print(hash(False)) # 0
print(hash([1,2,3])) #報錯列表是可變數據類型,是不可哈希的
注意:數字的哈希值就是數字本身!

小知識點:
  之前學字典的時候說過字典的優點之一是查詢速度快,
  字典的查詢甚至比二分查找還要快,為什么呢?
  字典的鍵是不可變的數據類型,所以是可哈希的,
  字典在存入內存的時候會將你的所有的key先進行哈希,再將哈希值存入內存中,
  這樣在查詢的時候可以根據哈希值直接就可以找到,所以查詢速度很快!

6、文件操作相關 *****

open:函數用于打開一個文件,創建一個file對象,相關的方法才可以調用它進行讀寫。

7、模塊相關 ***

__import__:函數用于動態加載類和函數 。

8、幫助 **

help:函數用于查看函數或模塊用途的詳細說明。
print(help(str))

9、調用相關

callable:函數用于檢查一個對象是否是可調用的。如果返回True,object仍然可能調用失敗;
但如果返回False,調用對象ojbect絕對不會成功。 ***
name = 'abc'

def fun():
  a = 2
  return a
print(callable(name)) #False 不可調用
print(callable(fun())) #False 不可調用:fun()不是一個對象,它是函數的執行者
print(callable(fun)) #True 可調用:fun是一個對象

10、查看內置屬性 ***

dir:函數不帶參數時,返回當前范圍內的變量、方法和定義的類型列表;
帶參數時,返回參數的屬性、方法列表。
如果參數包含方法__dir__(),該方法將被調用。如果參數不包含__dir__(),該方法將最大限度地收集參數信息。
s = 'a'
print(dir(s))

11、range

range:函數可創建一個整數對象,一般用在 for 循環中。
python2x: range(3) ---> [0,1,2] 列表
     xrange(3) ---> 迭代器
python3x: range(3) ---> range(0,3) 可迭代對象

next:內部實際使用了__next__方法,返回迭代器的下一個項目
iter:函數用來生成迭代器(將一個可迭代對象,生成迭代器)

12、數字相關(14)

數據類型(4):
bool :用于將給定參數轉換為布爾類型,如果沒有參數,返回False。 ***
print(bool(1 < 2 and 3 > 4 or 5 < 6 and 9 > 2 or 3 > 1)) # True
print(bool('fdsjkfl')) #True

int:函數用于將一個字符串或數字轉換為整型。***
print(int('123')) # 123
print(int(3.74)) # 取整并不是四舍五入:3
print(int('0101',base=2)) # 將2進制的0101轉化成十進制,結果為5

float:函數用于將整數和字符串轉換成浮點數。 ***
print(float(5)) # 5.0
print(float(3.16)) # 3.16
print(float('2')) # 2.0
print(float('2.1')) # 2.1
   
complex:函數用于創建一個值為real + imag * j的復數或者轉化一個字符串或數為復數。
如果第一個參數為字符串,則不需要指定第二個參數。。

13、進制轉換(3):

bin:將十進制轉換成二進制并返回。
print(bin(100)) # 0b1100100

oct:將十進制轉化成八進制字符串并返回。
print(oct(7)) # 0o7
print(oct(8)) # 0o10
print(oct(9)) # 0o11

hex:將十進制轉化成十六進制字符串并返回。
print(hex(10)) # 0xa
print(hex(15)) # 0xf
print(hex(17)) # 0x11

14、數學運算(7):

abs:函數返回數字的絕對值。 ****
print(abs(-100)) # 100

divmod:計算除數與被除數的結果,返回一個包含商和余數的元組(a // b, a % b)。 ****
print(divmod(12,7)) # (1, 5) (商,余數)

divmod的應用:分頁。
假設有103條數據,你每頁顯示12條數據,你最終顯示多少頁。
print(divmod(103,12)) # (8,7) 即要9頁,前8頁,每頁12條數據,最后一頁,7條數據

round:保留浮點數的小數位數,默認保留整數,四舍五入。 ***
print(round(3.141592653)) #默認保留整數(會四舍五入):3
print(round(3.641592653)) #默認保留整數(會四舍五入):4
print(round(3.141592653,4)) #保留四位小數(會四舍五入):3.1416
print(round(3.141592653,2)) #保留兩位小數(會四舍五入):3.14

pow:求x**y次冪。(三個參數為x**y的結果對z取余) **
print(pow(2,5)) # 2的5次冪:32
print(pow(2,5,12)) # 2的5次冪的結果對12取余(32對12取余):8

sum:對可迭代對象進行求和計算(可設置初始值)。 *****
sum(iterable,start_num)
print(sum([1,2,3,4,100,101])) # 211
print(sum([1,2,3,4,100,101],100)) # 311(第二個參數為初始值)
print(sum([int(i) for i in [1,'2',3,'4','100',101]])) 

min:返回可迭代對象的最小值(可加key,key為函數名,通過函數的規則,返回最小值)。 *****
print(min([1,-2,3,4,100,101])) # -2
print(min([1,-2,3,4,100,101],key=abs)) # 1

應用:
求出年齡最小的那個元組
ls = [('daming',1000),('xiaoming',18),('zhongming',500)]
這里的數據還不算復雜,可用之前學過的知識求出

min_age = min([i[1] for i in ls])
for j in ls:
    if j[1] == min_age:
        print(j)

但是有時候數據復雜的情況下,用之前的知識寫,可能會很復雜。
這時可用min()方法,配合自定制的函數進行求值

def func(x):
    return x[1]  # 1000  18  500
print(min(ls,key=func))
# 結果:('xiaoming', 18)

min(可迭代對象,key=函數名):
1,它會將iterable的每一個元素當做函數的參數傳進去。
2,它會按照返回值去比較大小。
3,最后返回的是遍歷的元素 x

dic = {'a':3,'b':2,'c':1}
def func1(x):
    return dic[x]
print(min(dic,key=func1))  
結果:c
# 這里傳進去的元素是字典的鍵,比較的返回值是字典的值,最后返回的是遍歷的鍵


def func2(x):
    return x[1]
print(min(dic.items(),key=func2))
結果:('c', 1)
# 這里傳進去的元素是字典的鍵和值組成的元組,比較的返回值是字典的值,最后返回的是遍歷的元組

max:返回可迭代對象的最大值(可加key,key為函數名,通過函數的規則,返回最大值)。 *****
print(max([1,2,3,100])) # 100

總結

以上是生活随笔為你收集整理的python之内置函数(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。