Python 專題一 函數(shù)的基礎(chǔ)知識(shí)
最近才開始學(xué)習(xí)Python語(yǔ)言,但就發(fā)現(xiàn)了它很多優(yōu)勢(shì)(如語(yǔ)言簡(jiǎn)潔、網(wǎng)絡(luò)爬蟲方面深有體會(huì)).我主要是通過《Python基礎(chǔ)教程》和"51CTO學(xué)院 智普教育的python視頻"學(xué)習(xí),在看視頻中老師講述函數(shù)知識(shí)的時(shí)候覺得非常不錯(cuò),所以就寫了第一篇Python學(xué)習(xí)的文章分享給大家.主要內(nèi)容:
1.Python安裝與基本輸入輸出,print()函數(shù)和raw_input()函數(shù)簡(jiǎn)單用法.
2.我根據(jù)視頻中學(xué)到的知識(shí),講解函數(shù)的基本知識(shí):
(1).系統(tǒng)提供內(nèi)部函數(shù):字符串函數(shù)庫(kù)、數(shù)學(xué)函數(shù)庫(kù)、網(wǎng)絡(luò)編程函數(shù)庫(kù)、OS函數(shù)庫(kù)
(2).第三方提供函數(shù)庫(kù):講解如何安裝httplib2第三方函數(shù)庫(kù),再做了個(gè)簡(jiǎn)單的網(wǎng)頁(yè)爬蟲例子
(3).用戶自定義函數(shù):講解無(wú)返回類型、有形參、預(yù)設(shè)值參數(shù)等自定義函數(shù)
3.同時(shí)網(wǎng)絡(luò)編程中與C#以前學(xué)過的進(jìn)行了簡(jiǎn)單對(duì)比,發(fā)現(xiàn)python確實(shí)有很多優(yōu)點(diǎn),而且很方便強(qiáng)大.
PS:文章中引用了很多視頻中的知識(shí)、書籍知識(shí)和自己的知識(shí),感謝那些作者和老師,希望文章對(duì)大家有所幫助,才開始學(xué)習(xí)python知識(shí),如果文章中有錯(cuò)誤或不足之處,還請(qǐng)海涵,也希望大家提出意見與君共勉.勿噴~
一. Python安裝及輸入輸出函數(shù)
python解釋器在Linux中可以內(nèi)置使用安裝,windows中需要去www.python.org官網(wǎng)downloads頁(yè)面下載(如python-2.7.8.amd64.msi),安裝Python集成開發(fā)環(huán)境(Python Integrated Development Environment,IDLE)即可.運(yùn)行程序輸入">>>print 'hello world'"則python解釋器會(huì)打印輸出"hello world"字符串. 如下:


然后講述Python程序的基本框架是"輸入-處理-輸出",而輸入輸出函數(shù)如下:
1.print()函數(shù)
函數(shù)用于輸出或打印整型、浮點(diǎn)型、字符串?dāng)?shù)據(jù)至屏幕,如print(3)、print(12.5)、print('H').它輸出變量格式"print(x)或print x",而且可以輸出多個(gè)變量"print x,y,z".并且支持格式化輸出數(shù)據(jù),調(diào)用format()函數(shù),其格式為:
print(format(val,format_modifier)) 其中val表示值,format_modifier表示格式字.
#簡(jiǎn)單輸出
>>> print(12.5)
12.5
>>> print("eastmount")
eastmount
#輸出"123.46",6.2表示輸出6位,小數(shù)點(diǎn)后精度2位,輸出最后一位6是四舍五入的結(jié)果
>>> print(format(123.45678,'6.2f'))
123.46
#輸出"口口口123",采用右對(duì)齊補(bǔ)空格方式輸出總共6位
>>> print(format(123.45678,'6.0f'))
123
#輸出"123.456780000"小數(shù)點(diǎn)后面9位,超出范圍會(huì)自動(dòng)補(bǔ)0
>>> print(format(123.45678,'6.9f'))
123.456780000
#輸出"34.56%"表示打印百分率
>>> print(format(0.3456,'.2%'))
34.56%
2.raw_input()函數(shù)
內(nèi)建函數(shù)從sys.stdin接受輸入,讀取輸入語(yǔ)句并返回string字符串.輸入以換行符結(jié)束,通過help(raw_input)可以查找?guī)椭?常見格式為:
s = raw_input([prompt]) 參數(shù)[prompt]可選,用于提示用戶輸入.
#輸入函數(shù)
>>> str1 = raw_input("please input a string:")
please input a string:I love you
>>> print(str1)
I love you
#查看str1數(shù)據(jù)類型
>>> type(str1)
<type 'str'>
注意raw_input()與input()的區(qū)別:(1).input支持合法python表格式"abc",字符串必須用引號(hào)括起,否則會(huì)報(bào)錯(cuò)"NameError: name 'abc' is not defined",而raw_input()任何類型輸入都可接受; (2).raw_input()將所有輸入作為字符串,返回string,而input()輸入純數(shù)字時(shí)具有自己的特性,返回輸入的數(shù)字類型int或float.舉例解釋如下:
#SyntaxError語(yǔ)法錯(cuò)誤
>>> str1 = input("input:")
input:abc
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'abc' is not defined
#正確輸入輸出
>>> str1 = input("input:")
input:"I love you"
>>> print str1
I love you
#input純數(shù)字 數(shù)據(jù)類型
>>> weight = input("weight:")
weight:12.5
>>> type(weight)
<type 'float'>
#raw_input 數(shù)據(jù)類型均為str
>>> age = raw_input("age:")
age:20
>>> type(age)
<type 'str'>
二. 函數(shù)之系統(tǒng)提供內(nèi)部函數(shù)
python提供的系統(tǒng)內(nèi)部庫(kù)函數(shù)主要講述一下四種類型:(引自視頻,只簡(jiǎn)單介紹)
1.字符串函數(shù)庫(kù)
通過help(str)可以查詢字符串函數(shù)庫(kù),其中查詢過程中"-More-"輸入回車實(shí)現(xiàn)滾動(dòng)信息,輸出"q"退出幫助(Quit).字符串函數(shù)大家都比較熟悉,無(wú)論C\C++\C#\Java都學(xué)過很多,而且基本大同小異.如:
islower()函數(shù)判斷字符串是否大小寫,一個(gè)大寫返回False.前面使用的format()函數(shù)、求字符串長(zhǎng)度len()函數(shù)均屬于字符串函數(shù)庫(kù),help(str.replace)可以查詢具體函數(shù)用法,該函數(shù)用于新字符串替換舊字符串.
#判斷字符串是否小寫
>>> str1 = "Eastmount"
>>> str1.islower()
False
#字符串替換
>>> str2 = 'adfababdfab'
>>> str2.replace('ab','AB')
'adfABABdfAB'
#字符串求長(zhǎng)度
>>> print(len(str2))
11
>>>
2.數(shù)學(xué)函數(shù)庫(kù)
使用數(shù)學(xué)函數(shù)庫(kù)時(shí)需要注意的是導(dǎo)入庫(kù)"import math",該庫(kù)中函數(shù)我們也非常熟悉,如sin()求正弦,cos()求余弦,pow(x,y)計(jì)算x的y次冪,如pow(3,4)=3*3*3*3,python中也可以使用3**4表示.help(math)中可以查看詳細(xì)信息,而且?guī)熘卸x了兩個(gè)常數(shù)DATA:
e = 2.718281... pi = 3.14159265...
#導(dǎo)入math庫(kù) >>> import math >>> print math.pi 3.14159265359 #計(jì)算sin30度 >>> val = math.sin(math.pi/6) >>> print val 0.5 #pow函數(shù) >>> math.pow(3,4) 81.0 >>> 3**4 81 >>> help(math.pow) Help on built-in function pow in module math: pow(...) pow(x, y) Return x**y (x to the power of y). >>>
3.網(wǎng)絡(luò)編程庫(kù)
系統(tǒng)提供內(nèi)部庫(kù)函數(shù)中網(wǎng)絡(luò)編程庫(kù),我此處僅僅舉個(gè)簡(jiǎn)單例子,socket(套接字網(wǎng)絡(luò)編程)獲取主機(jī)ip地址這是非常常見的運(yùn)用,我將與C#網(wǎng)絡(luò)編程進(jìn)行簡(jiǎn)單對(duì)比.后面的博文中將詳細(xì)講述python網(wǎng)絡(luò)編程.
>>> import socket
>>> baiduip = socket.gethostbyname('www.baidu.com')
>>> print baiduip
61.135.169.125
其中socket編程很常用,gethostbyname()返回指定主機(jī)ip,而C#中獲取百度網(wǎng)址的ip地址代碼如下所示.代碼中可能會(huì)出現(xiàn)"警告:Dns.GetHostByName()函數(shù)已過時(shí)",可替換為IPHostEntry myHost = Dns.GetHostEntry(www.baidu.com).輸出:
61.135.169.121
61.134.169.125
//引用新命名空間
using System.Net;
namespace GetIp
{
class Program
{
static void Main(string[] args)
{
//獲取DNS主機(jī)名的DNS信息
IPHostEntry myHost = Dns.GetHostByName("www.baidu.com");
IPAddress[] address = myHost.AddressList;
for (int index = 0; index < address.Length; index++)
{
Console.WriteLine(address[index]);
}
Console.ReadKey();
}
}
}
4.操作系統(tǒng)(OS)函數(shù)庫(kù)
操作系統(tǒng)庫(kù)函數(shù)引用"import os",舉例獲取當(dāng)前工作路徑和先死當(dāng)前路徑下的文件和目錄.使用os.system("cls")可以實(shí)現(xiàn)清屏功能.安裝python目錄Lib文件夾下含有很多py庫(kù)文件供使用.
>>> import os #獲取當(dāng)前工作路徑 >>> current = os.getcwd() >>> print current G:\software\Program software\Python\python insert #獲取當(dāng)前路徑下的文件和目錄 >>> dir = os.listdir(current) >>> print dir ['DLLs', 'Doc', 'h2.txt', 'include', 'Lib', 'libs', 'LICENSE.txt ', 'NEWS.txt', 'python.exe', 'pythonw.exe', 'README.txt', 'tcl', 'Tools'] >>>
三. 函數(shù)之第三方提供函數(shù)庫(kù)及安裝httplib2模塊過程
(一).安裝第三方函數(shù)庫(kù)httplib2過程
Python中第三方開源項(xiàng)目中提供函數(shù)庫(kù)供我們使用,比如使用httplib2庫(kù)函數(shù).在Linux中直接使用"easy_install httplib2"搜索自動(dòng)安裝,Windows下python開發(fā)工具IDLE里安裝httplib2模塊的過程如下(其他模塊類似).
1.下載httplib2模塊"https://code.google.com/p/httplib2/"到指定目錄,解壓壓縮包"httplib2_0.8.zip"到某目錄下,如果該網(wǎng)址google訪問失敗,可以到此處下載:
2.配置python運(yùn)行環(huán)境
右鍵"計(jì)算機(jī)"->"屬性"->在"系統(tǒng)"中選擇"高級(jí)系統(tǒng)設(shè)置"->在"系統(tǒng)屬性"中"高級(jí)"選擇"環(huán)境變量"

在系統(tǒng)環(huán)境變量Path后添加python安裝目錄"G:\software\Program software\Python\python insert"

3.在dos下安裝httpLib2
管理員模式運(yùn)行cmd,利用cd命令進(jìn)入httplib2_0.8.zip解壓目錄,輸入"python settup.py install",如下圖所示安裝成功.

4.使用httplib2
如果httplib2庫(kù)函數(shù)沒有安裝成功,"import httplib2"會(huì)提示錯(cuò)誤"ImportError: No module named httplib2".否則安裝成功,舉例如下.
import httplib2
#獲取HTTP對(duì)象
h = httplib2.Http()
#發(fā)出同步請(qǐng)求并獲取內(nèi)容
resp, content = h.request("http://www.csdn.net/")
#顯示返回頭信息
print resp
#顯示網(wǎng)頁(yè)相關(guān)內(nèi)容
print content
輸出頭信息:
{'status': '200', 'content-length': '108963', 'content-location': 'http://www.csdn.net/', .... 'Fri, 05 Sep 2014 20:07:24 GMT', 'content-type': 'text/html; charset=utf-8'}
(二).簡(jiǎn)單網(wǎng)頁(yè)爬蟲示例
使用第三方函數(shù)庫(kù)時(shí)的具體格式為module_name.method(parametes) 第三方函數(shù)名.方法(參數(shù)).
講述一個(gè)引用web庫(kù),urllib庫(kù)訪問公網(wǎng)上網(wǎng)頁(yè),webbrowser庫(kù)調(diào)用瀏覽器操作,下載csdn官網(wǎng)內(nèi)容并通過瀏覽器顯示的實(shí)例.
import urllib
import webbrowser as web
url = "http://www.soso.com"
content = urllib.urlopen(url).read()
open("soso.html","w").write(content)
web.open_new_tab("soso.html")
它會(huì)輸出True并在瀏覽器中打開下載的靜態(tài)網(wǎng)頁(yè).引用import webbrowser as web使用web,也可以直接引用,使用時(shí)"module_name.method"即可.
content = urllib.urlopen(url).read()表示打開url并讀取賦值
open("soso.html","w").write(content)表示在python安裝目錄寫靜態(tài)soso.html文件
web.open_new_tab("soso.html")表示打開該靜態(tài)文件新標(biāo)簽.
同樣可以使用web.open_new_tab('http://www.soso.com')直接在瀏覽器打開動(dòng)態(tài)網(wǎng)頁(yè).效果如下圖所示:


四. 函數(shù)之自定義函數(shù)
1.無(wú)返回值自定義函數(shù)
其基本語(yǔ)法格式如下:
def function_name([parameters]): 函數(shù)名([參數(shù)]),其中參數(shù)可有可無(wú) (TAB) statement1 (TAB) statement2 ...
注意:
(1).自定義函數(shù)名后面的冒號(hào)(:)不能省略,否則報(bào)錯(cuò)"invalid syntax",而且無(wú)需像C語(yǔ)言一樣加{};
(2).函數(shù)里每條語(yǔ)句前都有縮進(jìn)TAB,否則會(huì)報(bào)錯(cuò)"There's an error in your programs:expected an indented block",它的功能相當(dāng)于區(qū)分函數(shù)里的語(yǔ)句與函數(shù)外的語(yǔ)句.
舉例:打開IDLE工具->點(diǎn)擊欄"File"->New File新建文件->命名為test.py文件,在test文件里添加代碼如下.
def fun1(): print 'Hello world' print 'by eastmount csdn' print 'output' fun1() def fun2(val1,val2): print val1 print val2 fun2(8,15)
保存,在test.py文件里點(diǎn)擊Run->Run Module.輸出結(jié)果如下圖所示,其中fun1()函數(shù)無(wú)形參自定義函數(shù),fun2(val1,val2)是有形參自定義函數(shù),fun2(8,15)為函數(shù)的調(diào)用,實(shí)參8和15.

2.有返回值自定義函數(shù)
其基本語(yǔ)法格式如下:
def funtion_name([para1,para2...paraN]) statement1 statement2 .... return value1,value2...valueN
返回值支持一個(gè)或多個(gè)返回,需要注意的是自定義函數(shù)有返回值,主調(diào)函數(shù)就需要接受值(接受返回的結(jié)果).同時(shí)在定義變量時(shí)可能sum這些可能是關(guān)鍵字(注意顏色),最好使用不是關(guān)鍵字的變量.舉例:
def fun3(n1,n2): print n1,n2 n = n1 + n2 m = n1 - n2 p = n1 * n2 q = n1 / n2 e = n1 ** n2 return n,m,p,q,e a,b,c,d,e = fun3(2,10) print 'the result are ',a,b,c,d,e re = fun3(2,10) print re
輸出結(jié)果如下,其中需要注意的是參數(shù)一一對(duì)應(yīng),在除法中2/10=0,**冪運(yùn)算2的10次方=1024.而使用re=fun3(2,10)直接輸出的結(jié)果成為元組,后面會(huì)詳細(xì)講述,(12,-8,20,0,1024)元組中re[0]存儲(chǔ)12,re[1]存儲(chǔ)-8,依次~
2 10 the result are 12 -8 20 0 1024 2 10 (12, -8, 20, 0, 1024)
3.自定義函數(shù)參數(shù)含預(yù)定義
預(yù)設(shè)值的基本格式如下:
def function_name(para1,para2...parai=default1...paran=defaultn) statement1 statement2 ... return value1,value2...valuen
其中需要注意的是預(yù)定義值得參數(shù)不能先于無(wú)預(yù)定義值參數(shù),舉個(gè)例子講解.
def fun4(n1,n2,n3=10): print n1,n2,n3 n = n1 + n2 + n3 return n re1 = fun4(2,3) print 'result1 = ',re1 re2 = fun4(2,3,5) print 'result2 = ',re2
輸出結(jié)果如下圖所示,預(yù)定義的參數(shù)在調(diào)用時(shí),實(shí)參可以省略,也可以替換默認(rèn)定義的預(yù)定義值.
2 3 10 result1 = 15 2 3 5 result2 = 10
其中如果函數(shù)定義為def fun4(n3=10,n2,n1)就會(huì)報(bào)錯(cuò)"non-default argument follows default argument"(沒預(yù)定義的參數(shù)在預(yù)定義參數(shù)的后面),所以定義函數(shù)時(shí)需要注意該點(diǎn).
同時(shí)需要注意函數(shù)調(diào)用時(shí)的賦值順序問題,最好采用一對(duì)一復(fù)制,也可以函數(shù)調(diào)用中給出具體形參進(jìn)行賦值,但需要注意的是在函數(shù)調(diào)用過程中(使用函數(shù)時(shí)),有預(yù)定義值的參數(shù)不能先于無(wú)預(yù)定義值參數(shù)被賦值.
如例子中自定義函數(shù)def fun4(n1,n2,n3=10),在調(diào)用時(shí)可以:
(1).s=fun4(2,3)省略預(yù)定義參數(shù),它是一對(duì)一賦值,其中n1賦值2、n2賦值3、n3賦值10(預(yù)定義)
(2).s=fun4(4,n2=1,n3=12)它也是一對(duì)一賦值,而且預(yù)定義值n3替換為12
(3).s=fun4(n2=1,n1=4,n3=15)它的順序與定義函數(shù)沒有對(duì)應(yīng),但是調(diào)用時(shí)給出具體對(duì)應(yīng)也行
下面的情況就會(huì)出現(xiàn)所述的"有預(yù)定義值的參數(shù)先于無(wú)預(yù)定義值參數(shù)被賦值"錯(cuò)誤:
(1).s=fun4(n3=12,n2=1,4)此時(shí)會(huì)報(bào)錯(cuò)"non-keyword arg after keyword arg",它不能指定n1=4,就是沒有指定預(yù)定值n1=4在有預(yù)定值n3=12,n2=1之后,如果改成s=fun4(4,n2=1,n3=12)或s=fun4(4,n3=12,n2=1)即可.
(2).s=fun4(4,n1=2)此時(shí)也會(huì)報(bào)錯(cuò)"TypeError: fun4() got multiple values for keyword argument 'n1'",它不能指定n1=2&n2=4,而是n1會(huì)賦值多個(gè).
所以,最好還是一一對(duì)應(yīng)的調(diào)用函數(shù),平時(shí)寫程序沒有這樣去刁難自己,對(duì)應(yīng)即可
總結(jié):文章從系統(tǒng)提供的內(nèi)部函數(shù)、第三方提供函數(shù)庫(kù)+簡(jiǎn)單爬出代碼及安裝httplib2模塊過程和用戶自定函數(shù)三個(gè)方面進(jìn)行講述.文章中如果有錯(cuò)誤或不足之處,海涵~最后感謝那個(gè)視頻老師和上述博主、書籍老師及me.
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
通過實(shí)例簡(jiǎn)單了解Python sys.argv[]使用方法
這篇文章主要介紹了通過實(shí)例簡(jiǎn)單了解Python sys.argv[]使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
詳解python 3.6 安裝json 模塊(simplejson)
這篇文章主要介紹了python 3.6 安裝json 模塊(simplejson),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Python學(xué)習(xí)筆記之集合的概念和簡(jiǎn)單使用示例
這篇文章主要介紹了Python學(xué)習(xí)筆記之集合的概念和簡(jiǎn)單使用,涉及Python集合的定義、查找、添加、刪除等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-08-08
python實(shí)現(xiàn)保留小數(shù)位數(shù)的3種方法
本文主要介紹了python實(shí)現(xiàn)保留小數(shù)位數(shù)的3種方法,包括格式化字符串,format()函數(shù)和round()函數(shù),具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
python使用MkDocs自動(dòng)生成文檔的操作方法
python代碼注釋風(fēng)格有很多,比較主流的有 reStructuredText風(fēng)格、numpy風(fēng)格、Google風(fēng)格,自動(dòng)生成文檔的工具也有很多,常見的有:Pydocs,Sphinx和MkDocs,本文給大家介紹了python使用MkDocs自動(dòng)生成文檔的操作方法,需要的朋友可以參考下2024-06-06

