在python中,除了調(diào)用下載的擴展庫之外,還可以自定義函數(shù),方便自己。把基礎模塊放在固定文件夾(或相對固定文件夾),使用sys.append(r’自定義的模塊路徑’)實例如下:

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