在python中,除了調(diào)用下載的擴(kuò)展庫(kù)之外,還可以自定義函數(shù),方便自己。把基礎(chǔ)模塊放在固定文件夾(或相對(duì)固定文件夾),使用sys.append(r’自定義的模塊路徑’)實(shí)例如下:
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了西峰免費(fèi)建站歡迎大家使用!
1、在E:pycharm新建hello.py實(shí)現(xiàn)基礎(chǔ)功能函數(shù)(定義一個(gè)hello()函數(shù))
2、 調(diào)用自定義的函數(shù)
3、 運(yùn)行結(jié)果為:
更多Python相關(guān)技術(shù)文章,請(qǐng)?jiān)L問(wèn)Python教程欄目進(jìn)行學(xué)習(xí)!以上就是小編分享的關(guān)于python中如何調(diào)用自己寫的函數(shù)的詳細(xì)內(nèi)容希望對(duì)大家有所幫助,更多有關(guān)python教程請(qǐng)關(guān)注環(huán)球青藤其它相關(guān)文章!
1.并非只能訪問(wèn)文本文件
open可以訪問(wèn)任何形式的文件,在訪問(wèn)非文本格式文件(二進(jìn)制文件)的時(shí)候,訪問(wèn)模式通常加上‘b’(即二進(jìn)制模式:‘rb’或‘wb’),但并不必須,依情況而定
2.路徑是填寫在前面的filename參數(shù)處的
如你的例子,若要只讀這個(gè)文件,則是:
open('D:\\123.txt', 'r')
(由于\是轉(zhuǎn)義符,所以要將他再轉(zhuǎn)義,才能得到\符號(hào)本身)
若要寫入,則是:
open('D:\\123.txt', 'w')
以此類推
如果是不加路徑,只有一個(gè)文件名:
open('123.txt', 'r')
則會(huì)在python運(yùn)行的當(dāng)前目錄下尋找該文件名的文件
另:讀模式(r)必須保證文件存在,寫模式(w)至少要保證文件所在目錄存在(文件本身可以不存在)
如果不滿足,則系統(tǒng)會(huì)拋出一個(gè)IOError
Python中有許多內(nèi)置函數(shù),不像print、len那么廣為人知,但它們的功能卻異常強(qiáng)大,用好了可以大大提高代碼效率,同時(shí)提升代碼的簡(jiǎn)潔度,增強(qiáng)可閱讀性
Counter
collections在python官方文檔中的解釋是High-performance container datatypes,直接的中文翻譯解釋高性能容量數(shù)據(jù)類型。這個(gè)模塊實(shí)現(xiàn)了特定目標(biāo)的容器,以提供Python標(biāo)準(zhǔn)內(nèi)建容器 dict , list , set , 和 tuple 的替代選擇。在python3.10.1中它總共包含以下幾種數(shù)據(jù)類型:
容器名簡(jiǎn)介
namedtuple() 創(chuàng)建命名元組子類的工廠函數(shù)
deque 類似列表(list)的容器,實(shí)現(xiàn)了在兩端快速添加(append)和彈出(pop)
ChainMap 類似字典(dict)的容器類,將多個(gè)映射集合到一個(gè)視圖里面
Counter 字典的子類,提供了可哈希對(duì)象的計(jì)數(shù)功能
OrderedDict 字典的子類,保存了他們被添加的順序
defaultdict 字典的子類,提供了一個(gè)工廠函數(shù),為字典查詢提供一個(gè)默認(rèn)值
UserDict 封裝了字典對(duì)象,簡(jiǎn)化了字典子類化
UserList 封裝了列表對(duì)象,簡(jiǎn)化了列表子類化
UserString 封裝了字符串對(duì)象,簡(jiǎn)化了字符串子類化
其中Counter中文意思是計(jì)數(shù)器,也就是我們常用于統(tǒng)計(jì)的一種數(shù)據(jù)類型,在使用Counter之后可以讓我們的代碼更加簡(jiǎn)單易讀。Counter類繼承dict類,所以它能使用dict類里面的方法
舉例
#統(tǒng)計(jì)詞頻
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怎么實(shí)現(xiàn):
from collections import Counter
fruits = ['apple', 'peach', 'apple', 'lemon', 'peach', 'peach']
c = Counter(fruits)
print(dict(c))
#{'apple': 2, 'peach': 3, 'lemon': 1}顯然代碼更加簡(jiǎn)單了,也更容易閱讀和維護(hù)了。
elements()
返回一個(gè)迭代器,其中每個(gè)元素將重復(fù)出現(xiàn)計(jì)數(shù)值所指定次。元素會(huì)按首次出現(xiàn)的順序返回。如果一個(gè)元素的計(jì)數(shù)值小于1,elements()將會(huì)忽略它。
c = Counter(a=4, b=2, c=0, d=-2)
sorted(c.elements())
['a', 'a', 'a', 'a', 'b', 'b']most_common([n])
返回一個(gè)列表,其中包含n個(gè)最常見(jiàn)的元素及出現(xiàn)次數(shù),按常見(jiàn)程度由高到低排序。如果n被省略或?yàn)镹one,most_common()將返回計(jì)數(shù)器中的所有元素。計(jì)數(shù)值相等的元素按首次出現(xiàn)的順序排序:
Counter('abracadabra').most_common(3)
[('a', 5), ('b', 2), ('r', 2)]這兩個(gè)方法是Counter中最常用的方法,其他方法可以參考 python3.10.1官方文檔
實(shí)戰(zhàn)
Leetcode 1002.查找共用字符
給你一個(gè)字符串?dāng)?shù)組words,請(qǐng)你找出所有在words的每個(gè)字符串中都出現(xiàn)的共用字符(包括重復(fù)字符),并以數(shù)組形式返回。你可以按任意順序返回答案。
輸入:words = ["bella", "label", "roller"]
輸出:["e", "l", "l"]
輸入:words = ["cool", "lock", "cook"]
輸出:["c", "o"]看到統(tǒng)計(jì)字符,典型的可以用Counter完美解決。這道題是找出字符串列表里面每個(gè)元素都包含的字符,首先可以用Counter計(jì)算出每個(gè)元素每個(gè)字符出現(xiàn)的次數(shù),依次取交集最后得出所有元素共同存在的字符,然后利用elements輸出共用字符出現(xiàn)的次數(shù)
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())提交一下,發(fā)現(xiàn)83個(gè)測(cè)試用例耗時(shí)48ms,速度還是不錯(cuò)的
sorted
在處理數(shù)據(jù)過(guò)程中,我們經(jīng)常會(huì)用到排序操作,比如將列表、字典、元組里面的元素正/倒排序。這時(shí)候就需要用到sorted(),它可以對(duì)任何可迭代對(duì)象進(jìn)行排序,并返回列表
對(duì)列表升序操作:
a = sorted([2, 4, 3, 7, 1, 9])
print(a)
# 輸出:[1, 2, 3, 4, 7, 9]對(duì)元組倒序操作:
sorted((4,1,9,6),reverse=True)
print(a)
# 輸出:[9, 6, 4, 1]使用參數(shù):key,根據(jù)自定義規(guī)則,按字符串長(zhǎng)度來(lái)排序:
fruits = ['apple', 'watermelon', 'pear', 'banana']
a = sorted(fruits, key = lambda x : len(x))
print(a)
# 輸出:['pear', 'apple', 'banana', 'watermelon']all
all() 函數(shù)用于判斷給定的可迭代參數(shù)iterable中的所有元素是否都為 TRUE,如果是返回 True,否則返回 False。元素除了是 0、空、None、False外都算True。注意:空元組、空列表返回值為True。
all(['a', 'b', 'c', 'd']) # 列表list,元素都不為空或0
True
all(['a', 'b', '', 'd']) # 列表list,存在一個(gè)為空的元素
False
all([0, 1,2, 3]) # 列表list,存在一個(gè)為0的元素
False
all(('a', 'b', 'c', 'd')) # 元組tuple,元素都不為空或0
True
all(('a', 'b', '', 'd')) # 元組tuple,存在一個(gè)為空的元素
False
all((0, 1, 2, 3)) # 元組tuple,存在一個(gè)為0的元素
False
all([]) # 空列表
True
all(()) # 空元組
Trueany函數(shù)正好和all函數(shù)相反:判斷一個(gè)tuple或者list是否全為空,0,F(xiàn)alse。如果全為空,0,F(xiàn)alse,則返回False;如果不全為空,則返回True。
F-strings
在python3.6.2版本中,PEP 498提出一種新型字符串格式化機(jī)制,被稱為 “字符串插值” 或者更常見(jiàn)的一種稱呼是F-strings,F(xiàn)-strings提供了一種明確且方便的方式將python表達(dá)式嵌入到字符串中來(lái)進(jìn)行格式化:
s1='Hello'
s2='World'
print(f'{s1} {s2}!')
# Hello World!在F-strings中我們也可以執(zhí)行函數(shù):
def power(x):
return x*x
x=4
print(f'{x} * {x} = {power(x)}')
# 4 * 4 = 16而且F-strings的運(yùn)行速度很快,比傳統(tǒng)的%-string和str.format()這兩種格式化方法都快得多,書寫起來(lái)也更加簡(jiǎn)單。
本文主要講解了python幾種冷門但好用的函數(shù),更多內(nèi)容以后會(huì)陸陸續(xù)續(xù)更新~
python內(nèi)建函數(shù)總結(jié)
1. abs(x)
abs()函數(shù)返回?cái)?shù)字(可為普通型、長(zhǎng)整型或浮點(diǎn)型)的絕對(duì)值。如果給出復(fù)數(shù),返回值就是該復(fù)數(shù)的模。例如:
print abs(-2,4)
2.4
print abs(4+2j)
4.472135955
2. apply(function,args[,keywords])
apply()函數(shù)將args參數(shù)應(yīng)用到function上。function參數(shù)必須是可調(diào)用對(duì)象(函數(shù)、方法或其他可調(diào)用對(duì)象)。args參數(shù)必須以
序列形式給出。列表在應(yīng)用之前被轉(zhuǎn)換為元組。function對(duì)象在被調(diào)用時(shí),將args列表的內(nèi)容分別作為獨(dú)立的參數(shù)看待。例如:
apply(add,(1,3,4))
等價(jià)于
add(1,3,4)
在以列表或元組定義了一列參數(shù),且需要將此列表參數(shù)分別作為個(gè)個(gè)獨(dú)立參數(shù)使用的情況下,必須使用apply()函數(shù)。在要把變長(zhǎng)參數(shù)列應(yīng)用到已函數(shù)上時(shí),apply()函數(shù)非常有用。
可選項(xiàng)keywords參數(shù)應(yīng)是個(gè)字典,字典的關(guān)鍵字是字符串。這些字符串在apply()函數(shù)的參數(shù)列末尾處給出,它們將被用作關(guān)鍵字參數(shù)。
3. buffer(object[,offset[,size]])
如果object對(duì)象支持緩存調(diào)用接口buffer()函數(shù)就為object對(duì)象創(chuàng)建一個(gè)新緩存。這樣的對(duì)象包括字符串、數(shù)組和緩存。該新緩存通過(guò)使用從
offset參數(shù)值開始知道該對(duì)象末尾的存儲(chǔ)片段或從offset參數(shù)值開始直到size參數(shù)給出的尺寸為長(zhǎng)度的存儲(chǔ)片段來(lái)引用object對(duì)象。如果沒(méi)
給出任何選項(xiàng)參數(shù),緩存區(qū)域就覆蓋整個(gè)序列,最終得到的緩存對(duì)象是object對(duì)象數(shù)據(jù)的只讀拷貝。
緩存對(duì)象用于給某個(gè)對(duì)象類型創(chuàng)建一個(gè)更友好的接口。比如,字符串對(duì)象類型通用緩存對(duì)象而變得可用,允許逐個(gè)字節(jié)地訪問(wèn)字符串中的信息。
4. callable(object)
callable()函數(shù)在object對(duì)象是可調(diào)用對(duì)象的情況下,返回真(true);否則假(false),可調(diào)用對(duì)象包括函數(shù)、方法、代碼對(duì)象、類(在調(diào)用時(shí)返回新的實(shí)例)和已經(jīng)定義‘調(diào)用’方法的類實(shí)例
5. chr(i)
chr()函數(shù)返回與ASCII碼i相匹配的一個(gè)單一字符串,如下例所示:
print chr(72)+chr(101)+chr(108)+chr(111)
hello
chr()函數(shù)是ord()函數(shù)的反函數(shù),其中ord()函數(shù)將字符串轉(zhuǎn)換回ASCII整數(shù)碼,參數(shù)i的取值應(yīng)在0~255范圍內(nèi)。如果參數(shù)i的取值在此范圍之外,將引發(fā)ValueError異常。
6. cmp(x,y)
cmp()函數(shù)比較x和y這兩個(gè)對(duì)象,且根據(jù)比較結(jié)果返回一個(gè)整數(shù)。如果xy,則返回正數(shù)。請(qǐng)注意,此函數(shù)特別用來(lái)比較數(shù)值大小,而不是任何引用關(guān)系,因而有下面的結(jié)果:
a=99
b=int('99')
cmp(a,b)
7. coerce(x,y)
coerce()函數(shù)返回一個(gè)元組,該元組由兩個(gè)數(shù)值型參數(shù)組成。此函數(shù)將兩個(gè)數(shù)值型參數(shù)轉(zhuǎn)換為同一類型數(shù)字,其轉(zhuǎn)換規(guī)則與算術(shù)轉(zhuǎn)換規(guī)則一樣。一下是兩個(gè)例子:
a=1
b=1.2
coerce(a,b)
(1.0,1.2)
a=1+2j
b=4.3e10
coerce(a,b)
((1+2j),(43000000000+0j))
8 compile(string,filename,kind)
compile()函數(shù)將string編譯為代碼對(duì)象,編譯生成的代碼對(duì)象接下來(lái)被exec語(yǔ)句執(zhí)行,接著能利用eval()函數(shù)對(duì)其進(jìn)行求值。
filename參數(shù)應(yīng)是代碼從其中讀出的文件名。如果內(nèi)部生成文件名,filename參數(shù)值應(yīng)是相應(yīng)的標(biāo)識(shí)符。kind參數(shù)指定string參數(shù)中所含代碼的類別。
舉例如下:
a=compile(‘print “Hello World”’,’’,’single’)
exec(a)
Hello World
eval(a)
Hello World
9. complex(real,[image])
Complex()函數(shù)返回一個(gè)復(fù)數(shù),其實(shí)部為real參數(shù)值。如果給出image參數(shù)的值,則虛部就為image;如果默認(rèn)image參數(shù),則虛部為0j。
10. delattr(object,name)
delattr()函數(shù)在object對(duì)象許可時(shí),刪除object對(duì)象的name屬性,此函數(shù)等價(jià)于如下語(yǔ)句:
del object.attr
而delattr()函數(shù)允許利用編程方法定義來(lái)定義object和name參數(shù),并不是在代碼中顯示指定。
python filter內(nèi)建函數(shù)
filter函數(shù)是python內(nèi)建函數(shù),可以操作任何可迭代類型,如list,tuple,string.
filter需要帶上一個(gè)函數(shù)function和一個(gè)可迭代序列作為參數(shù)。filter()將調(diào)用該function作用于每一個(gè)可迭代序列的元素,并返回一個(gè)由該function驗(yàn)證后返回值為true的元素組成新的可迭代序列,新序列的類型保持與filter參數(shù)序列的類型一致
2.filter與數(shù)字
下面用這個(gè)例子來(lái)說(shuō)明:
#建個(gè)數(shù)字列表
numbers?=?[1,5,9,8,4,6,3,7]
#定義一個(gè)過(guò)濾標(biāo)準(zhǔn),取小于5的數(shù)
def?lessThanFive(element):
return?element??5
print?filter(lessThanFive,?numbers)
輸出結(jié)果是列表:[1,4,3]
解說(shuō):此處的過(guò)濾函數(shù)lessThanFive必需帶入一個(gè)參數(shù)(filter()會(huì)調(diào)用lessThanFive,參數(shù)是列表nembers中的每一個(gè)元素,一次一個(gè))。filter()返回所有值都是小于5的列表
3.filter與字符串
下面用如下例子說(shuō)明:
#定義元組類型
names?=?('Jack',?'Jill,?'Steve',?'')
#篩選出名字
new_names?=?filter(None,?names)
print?new_names
輸出結(jié)果是元組:
('Jack',?'Jill,?'Steve')
在元組names最后一個(gè)名字是空字符串,而filter的第一個(gè)參數(shù)是None,這說(shuō)明需要使用identity函數(shù)(該函數(shù)是簡(jiǎn)單的返回該元素的)
因?yàn)閜ython對(duì)空字符串,0和None作為False,所以上面的filter的語(yǔ)句就是移除空元素。
4.filter和函數(shù)
目的:找出以J開頭的名字
def?startsWithJ(element):
if?element:
return?element[0]?==?'J'
return?False
j_names?=?filter(startsWithJ,?names)
print?j_names
輸出結(jié)果是元組:('Jack',?'Jill')
注意到了嗎,上面的2個(gè)結(jié)果都是tuple而不是list,再一次說(shuō)明fliter的返回值類型與參數(shù)序列的類型保持一致
Python解釋器內(nèi)置了許多函數(shù),這意味著我們無(wú)需定義,始終可以它們。接下來(lái)和大家一起討論一個(gè)常用的內(nèi)建函數(shù)-input()和isinstance()。
input()
input()函數(shù)讀取用戶輸入,并轉(zhuǎn)換成字符串:
a?=?input()??#?將input()返回的值賦值給a
Python
a????????????#?查看a的值(為字符串'Python')
'Python'
input()函數(shù)可以提供一個(gè)參數(shù),用來(lái)提示用戶:
b?=?input('請(qǐng)輸入你最喜歡的水果:??')???#?給用戶必要的提示
請(qǐng)輸入你最喜歡的水果:??香蕉
b
'香蕉'
需要注意的是,input()函數(shù)返回的值總是字符串,當(dāng)用戶輸入的是數(shù)字也是這樣,所以當(dāng)使用它時(shí)一定要注意:
num?=?input('請(qǐng)輸入一個(gè)數(shù)字:?')
請(qǐng)輸入一個(gè)數(shù)字:?10
num?+?9????????????????????????????#?試圖把num和數(shù)字相加
Traceback?(most?recent?call?last):
File?"",?line?1,?in
TypeError:?must?be?str,?not?int
num
'10'
type(num)???????????????????????????#?查看num的數(shù)字類型
class?'str'
isinstance()
isinstance()函數(shù)用于檢查對(duì)象是否為指定類(或者說(shuō)數(shù)據(jù)類型)的實(shí)例。isintance()的第一個(gè)參數(shù)為一個(gè)對(duì)象,第二個(gè)參數(shù)為要檢查的數(shù)據(jù)類型。
舉個(gè)例子,比如有有一個(gè)變量,你想檢查它是否為數(shù)字類型,可以使用isinstance()函數(shù):
score?=?90
result?=?isinstance(score,?int)
if?result:
...?????print('score為int數(shù)據(jù)類型')
...?else:
...?????print('score不為int數(shù)據(jù)類型')
...
score為int數(shù)據(jù)類型
除了能檢查是否為int類型外,isintance()還能檢查其他數(shù)據(jù)類型(當(dāng)然了),下面是一個(gè)綜合示例:
pi?=?3.14
name?=?'Wang'
complex_num?=?1?+?2j
isinstance(pi,?float)??????????????#?3.14為浮點(diǎn)數(shù)類型
True
isinstance(name,?str)??????????????#?'Wang'為字符串類型
True
isinstance(complex_num,?complex)???#??1?+?2j為復(fù)數(shù)
True
isinstance()還可以驗(yàn)證某個(gè)對(duì)象是否為自定義的類型:
class?Developer:?????????????????????????????#?定義一個(gè)叫做Developer的類
...
...?????def?__init__(self,?name):????????????????#?__init__方法中,需要輸入名字
...?????????self.name?=?name
...?????def?display(self):???????????????????????#?定義了display()方法
...?????????print("Developer:",?self.name,?"-")
...
class?PythonDeveloper(Developer):????????????#?PythonDeveloper類,繼承了Developer類
...
...?????def?__init__(self,?name,?language):
...?????????self.name?=?name
...?????????self.language?=?language
...
...?????def?display(self):????????????????????????#?覆蓋了父類的display方法
...?????????print("Python?Developer:",?self.name,?"language:",?self.language,?"-")
...
dev?=?Developer('Zhang')?????????????????????#?創(chuàng)建一個(gè)Developer對(duì)象
dev.display()????????????????????????????????#?調(diào)用display()方法,以查看該對(duì)象
Developer:?Zhang?-
isinstance(dev,?Developer)???????????????????#?判斷dev是否為Developer類,答案是肯定的
True
isinstance(dev,?PythonDeveloper)?????????????#?判斷dev是否為PythonDeveloper類,當(dāng)然不是
False
python_dev?=?PythonDeveloper('Liu',?'Python')??#?創(chuàng)建一個(gè)PythonDeveloper對(duì)象,注意PythonDeveloper是Developer的子類
python_dev.display()??????????????????????????#?調(diào)用display方法
Python?Developer:?Liu?language:?Python?-
isinstance(python_dev,?Developer)?????????????#?判斷python_dev是否為Developer類,答案是肯定的
True
isinstance(python_dev,?PythonDeveloper)??????#?判斷python是否為PythonDeveloper類,答案也是肯定的
True
關(guān)于Python的基礎(chǔ)問(wèn)題可以看下這個(gè)網(wǎng)頁(yè)的視頻教程,網(wǎng)頁(yè)鏈接,希望我的回答能幫到你。
新聞標(biāo)題:python內(nèi)建函數(shù)教程,python自建函數(shù)
當(dāng)前鏈接:http://vcdvsql.cn/article16/hshcgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、Google、商城網(wǎng)站、App設(shè)計(jì)、虛擬主機(jī)、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)