本文目錄一覽:
python裡面有哪些自帶函數?
python系統提供了下面常用的函數:
1. 數學庫模塊(math)提供了很多數學運算函數;
2.複數模塊(cmath)提供了用於複數運算的函數;
3.隨機數模塊(random)提供了用來生成隨機數的函數;
4.時間(time)和日曆(calendar)模塊提供了能處理日期和時間的函數。
注意:在調用系統函數之前,先要使用import 語句導入 相應的模塊
該語句將模塊中定義的函數代碼複製到自己的程 序中,然後就可以訪問模塊中的任何函數,其方 法是在函數名前面加上「模塊名.」。
希望能幫到你。
Python的函數都有哪些?
Python 函數
函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的代碼段。
函數能提高應用的模塊性,和代碼的重複利用率。你已經知道Python提供了許多內建函數,比如print()。但你也可以自己創建函數,這被叫做用戶自定義函數。
定義一個函數
你可以定義一個由自己想要功能的函數,以下是簡單的規則:
函數代碼塊以 def 關鍵詞開頭,後接函數標識符名稱和圓括弧()。
任何傳入參數和自變數必須放在圓括弧中間。圓括弧之間可以用於定義參數。
函數的第一行語句可以選擇性地使用文檔字元串—用於存放函數說明。
函數內容以冒號起始,並且縮進。
return [表達式] 結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當於返回 None。
語法
def functionname( parameters ): “函數_文檔字元串”
function_suite
return [expression]
默認情況下,參數值和參數名稱是按函數聲明中定義的順序匹配起來的。
實例
以下為一個簡單的Python函數,它將一個字元串作為傳入參數,再列印到標準顯示設備上。
實例(Python 2.0+)
def printme( str ): “列印傳入的字元串到標準顯示設備上”
print str
return
函數調用
定義一個函數只給了函數一個名稱,指定了函數里包含的參數,和代碼塊結構。
這個函數的基本結構完成以後,你可以通過另一個函數調用執行,也可以直接從Python提示符執行。
如下實例調用了printme()函數:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 定義函數def printme( str ): “列印任何傳入的字元串”
print str
return
# 調用函數printme(“我要調用用戶自定義函數!”)printme(“再次調用同一函數”)
以上實例輸出結果:
我要調用用戶自定義函數!再次調用同一函數
參數傳遞
在 python 中,類型屬於對象,變數是沒有類型的:
a=[1,2,3]
a=”Runoob”
以上代碼中,[1,2,3] 是 List 類型,”Runoob” 是 String 類型,而變數 a 是沒有類型,她僅僅是一個對象的引用(一個指針),可以是 List 類型對象,也可以指向 String 類型對象。
可更改(mutable)與不可更改(immutable)對象
在 python 中,strings, tuples, 和 numbers 是不可更改的對象,而 list,dict 等則是可以修改的對象。
不可變類型:變數賦值 a=5 後再賦值 a=10,這裡實際是新生成一個 int 值對象 10,再讓 a 指向它,而 5 被丟棄,不是改變a的值,相當於新生成了a。
可變類型:變數賦值 la=[1,2,3,4] 後再賦值 la[2]=5 則是將 list la 的第三個元素值更改,本身la沒有動,只是其內部的一部分值被修改了。
python 函數的參數傳遞:
不可變類型:類似 c++ 的值傳遞,如 整數、字元串、元組。如fun(a),傳遞的只是a的值,沒有影響a對象本身。比如在 fun(a)內部修改 a 的值,只是修改另一個複製的對象,不會影響 a 本身。
可變類型:類似 c++ 的引用傳遞,如 列表,字典。如 fun(la),則是將 la 真正的傳過去,修改後fun外部的la也會受影響
python 中一切都是對象,嚴格意義我們不能說值傳遞還是引用傳遞,我們應該說傳不可變對象和傳可變對象。
python 傳不可變對象實例
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
def ChangeInt( a ): a = 10
b = 2ChangeInt(b)print b # 結果是 2
實例中有 int 對象 2,指向它的變數是 b,在傳遞給 ChangeInt 函數時,按傳值的方式複製了變數 b,a 和 b 都指向了同一個 Int 對象,在 a=10 時,則新生成一個 int 值對象 10,並讓 a 指向它。
傳可變對象實例
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 可寫函數說明def changeme( mylist ): “修改傳入的列表”
mylist.append([1,2,3,4])
print “函數內取值: “, mylist
return
# 調用changeme函數mylist = [10,20,30]changeme( mylist )print “函數外取值: “, mylist
實例中傳入函數的和在末尾添加新內容的對象用的是同一個引用,故輸出結果如下:
函數內取值: [10, 20, 30, [1, 2, 3, 4]]函數外取值: [10, 20, 30, [1, 2, 3, 4]]
參數
以下是調用函數時可使用的正式參數類型:
必備參數
關鍵字參數
默認參數
不定長參數
必備參數
必備參數須以正確的順序傳入函數。調用時的數量必須和聲明時的一樣。
調用printme()函數,你必須傳入一個參數,不然會出現語法錯誤:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
#可寫函數說明def printme( str ): “列印任何傳入的字元串”
print str
return
#調用printme函數printme()
以上實例輸出結果:
Traceback (most recent call last):
File “test.py”, line 11, in module
printme()TypeError: printme() takes exactly 1 argument (0 given)
關鍵字參數
關鍵字參數和函數調用關係緊密,函數調用使用關鍵字參數來確定傳入的參數值。
使用關鍵字參數允許函數調用時參數的順序與聲明時不一致,因為 Python 解釋器能夠用參數名匹配參數值。
以下實例在函數 printme() 調用時使用參數名:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
#可寫函數說明def printme( str ): “列印任何傳入的字元串”
print str
return
#調用printme函數printme( str = “My string”)
以上實例輸出結果:
My string
下例能將關鍵字參數順序不重要展示得更清楚:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
#可寫函數說明def printinfo( name, age ): “列印任何傳入的字元串”
print “Name: “, name
print “Age “, age
return
#調用printinfo函數printinfo( age=50, name=”miki” )
以上實例輸出結果:
Name: mikiAge 50
默認參數
調用函數時,默認參數的值如果沒有傳入,則被認為是默認值。下例會列印默認的age,如果age沒有被傳入:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
#可寫函數說明def printinfo( name, age = 35 ): “列印任何傳入的字元串”
print “Name: “, name
print “Age “, age
return
#調用printinfo函數printinfo( age=50, name=”miki” )printinfo( name=”miki” )
以上實例輸出結果:
Name: mikiAge 50Name: mikiAge 35
不定長參數
你可能需要一個函數能處理比當初聲明時更多的參數。這些參數叫做不定長參數,和上述2種參數不同,聲明時不會命名。基本語法如下:
def functionname([formal_args,] *var_args_tuple ): “函數_文檔字元串”
function_suite
return [expression]
加了星號(*)的變數名會存放所有未命名的變數參數。不定長參數實例如下:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 可寫函數說明def printinfo( arg1, *vartuple ): “列印任何傳入的參數”
print “輸出: “
print arg1
for var in vartuple: print var
return
# 調用printinfo 函數printinfo( 10 )printinfo( 70, 60, 50 )
以上實例輸出結果:
輸出:10輸出:706050
匿名函數
python 使用 lambda 來創建匿名函數。
lambda只是一個表達式,函數體比def簡單很多。
lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
lambda函數擁有自己的命名空間,且不能訪問自有參數列表之外或全局命名空間里的參數。
雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內聯函數,後者的目的是調用小函數時不佔用棧內存從而增加運行效率。
語法
lambda函數的語法只包含一個語句,如下:
lambda [arg1 [,arg2,…..argn]]:expression
如下實例:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 可寫函數說明sum = lambda arg1, arg2: arg1 + arg2
# 調用sum函數print “相加後的值為 : “, sum( 10, 20 )print “相加後的值為 : “, sum( 20, 20 )
以上實例輸出結果:
相加後的值為 : 30相加後的值為 : 40
return 語句
return語句[表達式]退出函數,選擇性地向調用方返回一個表達式。不帶參數值的return語句返回None。之前的例子都沒有示範如何返回數值,下例便告訴你怎麼做:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 可寫函數說明def sum( arg1, arg2 ): # 返回2個參數的和.”
total = arg1 + arg2
print “函數內 : “, total
return total
# 調用sum函數total = sum( 10, 20 )
以上實例輸出結果:
函數內 : 30
變數作用域
一個程序的所有的變數並不是在哪個位置都可以訪問的。訪問許可權決定於這個變數是在哪裡賦值的。
變數的作用域決定了在哪一部分程序你可以訪問哪個特定的變數名稱。兩種最基本的變數作用域如下:
全局變數
局部變數
全局變數和局部變數
定義在函數內部的變數擁有一個局部作用域,定義在函數外的擁有全局作用域。
局部變數只能在其被聲明的函數內部訪問,而全局變數可以在整個程序範圍內訪問。調用函數時,所有在函數內聲明的變數名稱都將被加入到作用域中。如下實例:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
total = 0 # 這是一個全局變數# 可寫函數說明def sum( arg1, arg2 ): #返回2個參數的和.”
total = arg1 + arg2 # total在這裡是局部變數.
print “函數內是局部變數 : “, total
return total
#調用sum函數sum( 10, 20 )print “函數外是全局變數 : “, total
以上實例輸出結果:
函數內是局部變數 : 30函數外是全局變數 : 0
Python中冷門但非常好用的內置函數
Python中有許多內置函數,不像print、len那麼廣為人知,但它們的功能卻異常強大,用好了可以大大提高代碼效率,同時提升代碼的簡潔度,增強可閱讀性
Counter
collections在python官方文檔中的解釋是High-performance container datatypes,直接的中文翻譯解釋高性能容量數據類型。這個模塊實現了特定目標的容器,以提供Python標準內建容器 dict , list , set , 和 tuple 的替代選擇。在python3.10.1中它總共包含以下幾種數據類型:
容器名簡介
namedtuple() 創建命名元組子類的工廠函數
deque 類似列表(list)的容器,實現了在兩端快速添加(append)和彈出(pop)
ChainMap 類似字典(dict)的容器類,將多個映射集合到一個視圖裡面
Counter 字典的子類,提供了可哈希對象的計數功能
OrderedDict 字典的子類,保存了他們被添加的順序
defaultdict 字典的子類,提供了一個工廠函數,為字典查詢提供一個默認值
UserDict 封裝了字典對象,簡化了字典子類化
UserList 封裝了列表對象,簡化了列表子類化
UserString 封裝了字元串對象,簡化了字元串子類化
其中Counter中文意思是計數器,也就是我們常用於統計的一種數據類型,在使用Counter之後可以讓我們的代碼更加簡單易讀。Counter類繼承dict類,所以它能使用dict類裡面的方法
舉例
#統計詞頻
fruits = [‘apple’, ‘peach’, ‘apple’, ‘lemon’, ‘peach’, ‘peach’]
result = {}
for fruit in fruits:
if not result.get(fruit):
result[fruit] = 1
else:
result[fruit] += 1
print(result)
#{‘apple’: 2, ‘peach’: 3, ‘lemon’: 1}下面我們看用Counter怎麼實現:
from collections import Counter
fruits = [‘apple’, ‘peach’, ‘apple’, ‘lemon’, ‘peach’, ‘peach’]
c = Counter(fruits)
print(dict(c))
#{‘apple’: 2, ‘peach’: 3, ‘lemon’: 1}顯然代碼更加簡單了,也更容易閱讀和維護了。
elements()
返回一個迭代器,其中每個元素將重複出現計數值所指定次。元素會按首次出現的順序返回。如果一個元素的計數值小於1,elements()將會忽略它。
c = Counter(a=4, b=2, c=0, d=-2)
sorted(c.elements())
[‘a’, ‘a’, ‘a’, ‘a’, ‘b’, ‘b’]most_common([n])
返回一個列表,其中包含n個最常見的元素及出現次數,按常見程度由高到低排序。如果n被省略或為None,most_common()將返回計數器中的所有元素。計數值相等的元素按首次出現的順序排序:
Counter(‘abracadabra’).most_common(3)
[(‘a’, 5), (‘b’, 2), (‘r’, 2)]這兩個方法是Counter中最常用的方法,其他方法可以參考 python3.10.1官方文檔
實戰
Leetcode 1002.查找共用字元
給你一個字元串數組words,請你找出所有在words的每個字元串中都出現的共用字元(包括重複字元),並以數組形式返回。你可以按任意順序返回答案。
輸入:words = [“bella”, “label”, “roller”]
輸出:[“e”, “l”, “l”]
輸入:words = [“cool”, “lock”, “cook”]
輸出:[“c”, “o”]看到統計字元,典型的可以用Counter完美解決。這道題是找出字元串列表裡面每個元素都包含的字元,首先可以用Counter計算出每個元素每個字元出現的次數,依次取交集最後得出所有元素共同存在的字元,然後利用elements輸出共用字元出現的次數
class Solution:
def commonChars(self, words: List[str]) – List[str]:
from collections import Counter
ans = Counter(words[0])
for i in words[1:]:
ans = Counter(i)
return list(ans.elements())提交一下,發現83個測試用例耗時48ms,速度還是不錯的
sorted
在處理數據過程中,我們經常會用到排序操作,比如將列表、字典、元組裡面的元素正/倒排序。這時候就需要用到sorted(),它可以對任何可迭代對象進行排序,並返回列表
對列表升序操作:
a = sorted([2, 4, 3, 7, 1, 9])
print(a)
# 輸出:[1, 2, 3, 4, 7, 9]對元組倒序操作:
sorted((4,1,9,6),reverse=True)
print(a)
# 輸出:[9, 6, 4, 1]使用參數:key,根據自定義規則,按字元串長度來排序:
fruits = [‘apple’, ‘watermelon’, ‘pear’, ‘banana’]
a = sorted(fruits, key = lambda x : len(x))
print(a)
# 輸出:[‘pear’, ‘apple’, ‘banana’, ‘watermelon’]all
all() 函數用於判斷給定的可迭代參數iterable中的所有元素是否都為 TRUE,如果是返回 True,否則返回 False。元素除了是 0、空、None、False外都算True。注意:空元組、空列表返回值為True。
all([‘a’, ‘b’, ‘c’, ‘d’]) # 列表list,元素都不為空或0
True
all([‘a’, ‘b’, ”, ‘d’]) # 列表list,存在一個為空的元素
False
all([0, 1,2, 3]) # 列表list,存在一個為0的元素
False
all((‘a’, ‘b’, ‘c’, ‘d’)) # 元組tuple,元素都不為空或0
True
all((‘a’, ‘b’, ”, ‘d’)) # 元組tuple,存在一個為空的元素
False
all((0, 1, 2, 3)) # 元組tuple,存在一個為0的元素
False
all([]) # 空列表
True
all(()) # 空元組
Trueany函數正好和all函數相反:判斷一個tuple或者list是否全為空,0,False。如果全為空,0,False,則返回False;如果不全為空,則返回True。
F-strings
在python3.6.2版本中,PEP 498提出一種新型字元串格式化機制,被稱為 「字元串插值」 或者更常見的一種稱呼是F-strings,F-strings提供了一種明確且方便的方式將python表達式嵌入到字元串中來進行格式化:
s1=’Hello’
s2=’World’
print(f'{s1} {s2}!’)
# Hello World!在F-strings中我們也可以執行函數:
def power(x):
return x*x
x=4
print(f'{x} * {x} = {power(x)}’)
# 4 * 4 = 16而且F-strings的運行速度很快,比傳統的%-string和str.format()這兩種格式化方法都快得多,書寫起來也更加簡單。
本文主要講解了python幾種冷門但好用的函數,更多內容以後會陸陸續續更新~
Python常用函數三有哪些?這7個函數使用頻率最高,總算搞明白了
1.1 例如:print(hex(2))案例
1.2 輸出函數:print(hex(2))
1.3 輸出結果:0x2
1.4 解析說明:返回16進位的數。
2.1 例如:print(chr(10))案例
2.2 輸出函數:print(chr(10))
2.3 輸出結果:0o12
2.4 解析說明:返回當前整數對應的ASCll碼
3.1 例如:print(ord(“b”))案例
3.2 輸出函數:print(ord(“b”))
3.3 輸出結果:98
3.4 解析說明:返回當前ASCll碼的10進位數
4.1 例如:print(chr(97))
4.2 輸出函數:print(chr(97))
4.3 輸出結果:b
4.4 解析說明:返回當前ASCll碼的10進位數。
案例一:給你一個字元串,s = ‘hello kitty’
1.1 輸出函數:print(s.capitalize())
1.2 輸出結果:0x2
1.3 解析說明:返回16進位的數。
2.1輸出函數:print(s.replace(‘kitty’,’kuang’))
2.2 輸出結果:hello kuang
2.3 解析說明:替換功能,將kitty換成kuang。
2.4 輸出函數:print(s.replace(‘4′,’KK’))
2.5 輸出結果:12KK12KK
2.6 解析說明:所有的4都替換成KK
2.7 輸出函數:print(s.replace(‘4′,’KK’))
2.8 輸出結果:12KK12KK124
2.9 解析說明:將前兩個的4替換成go
案例一:給你一個字元串,ip = ‘192.168.1.1’
3.1 輸出函數:print(ip.split(‘,’))
3.2 輸出結果:[‘192.168.1.1’]
3.3 解析說明:將字元串分割成列表
案例一:給你一個字元串,ip = ‘192.168.1.1’
3.3 輸出函數:print(ip.split(‘,’,2))
3.4 輸出結果:[‘192.168.1.1’]
3.5 解析說明:從第二個開始分割成列表
原創文章,作者:WYWZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/148377.html