本文從系統提供的內部函數、第三方提供函數庫+簡單爬出程式碼及安裝httplib2模組過程和用戶自定函數三個面向進行講述。具有很好的參考價值。下面跟著小編一起來看下吧
最近才開始學習Python語言,但就發現了它很多優勢(如語言簡潔、網絡爬蟲方面深有體會).我主要是透過《Python基礎教程》和"51CTO學院智普教育的python視頻"學習,在看視頻中老師講述函數知識的時候覺得非常不錯,所以就寫了第一篇Python學習的文章分享給大家.主要內容:
1.Python安裝與基本輸入輸出,print()函數和raw_input()函數簡單用法.
2.我根據影片中學到的知識,講解函數的基本知識:
(1).系統提供內部函數:字串函數庫、數學函數庫、網路程式設計函數庫、OS函數函式庫
(2).第三方提供函式庫:講解如何安裝httplib2第三方函式庫,再做了個簡單的網頁爬蟲範例
(3).使用者自訂函數:講解無返回類型、有形參、預設值參數等自訂函數
3.同時網路程式設計中與C#先前學過的進行了簡單對比,發現python確實有很多優點,而且很方便強大.
PS:文章中引用了很多影片中的知識、書籍知識和自己的知識,感謝那些作者和老師,希望文章對大家有所幫助,才開始學習python知識,如果文章中有錯誤或不足之處,還請海涵,也希望大家提出意見與君共勉.勿噴~
一. Python安裝及輸入輸出函數
python解釋器在Linux中可以內建使用安裝,windows中需要去www.python.org官網downloads頁面下載(如python-2.7.8.amd64.msi),安裝Python集成開發環境(Python Integrated Development Environment,IDLE)即可.執行程式輸入">>>print 'hello world'"則python解釋器會列印輸出"hello world"字串. 如下:
#然後講述Python程式的基本框架是"輸入-處理-輸出",而輸入輸出函數如下:
1.print()函數
函數用於輸出或列印整數、浮點型、字串資料至螢幕,如print(3)、print(12.5) 、print('H')。它輸出變數格式"print(x)或print x",而且可以輸出多個變數"print x,y,z".並且支援格式化輸出資料,呼叫format()函數,其格式為:
print(format(val,format_modifier)) 其中val表示值,format_modifier表示格式字.
#简单输出 >>> print(12.5) 12.5 >>> print("eastmount") eastmount #输出"123.46",6.2表示输出6位,小数点后精度2位,输出最后一位6是四舍五入的结果 >>> print(format(123.45678,'6.2f')) 123.46 #输出"口口口123",采用右对齐补空格方式输出总共6位 >>> print(format(123.45678,'6.0f')) 123 #输出"123.456780000"小数点后面9位,超出范围会自动补0 >>> print(format(123.45678,'6.9f')) 123.456780000 #输出"34.56%"表示打印百分率 >>> print(format(0.3456,'.2%')) 34.56%
2.raw_input()函數
#內建函數從sys.stdin接受輸入,讀取輸入語句並傳回string字串.輸入以換行符號結束,透過help(raw_input)可以找出幫助,常見格式為:
s = raw_input([prompt]) 參數[prompt]可選,用於提示使用者輸入.
#输入函数 >>> str1 = raw_input("please input a string:") please input a string:I love you >>> print(str1) I love you #查看str1数据类型 >>> type(str1) <type 'str'>
#注意raw_input()與input()的區別:(1 ).input支援合法python表格式"abc",字串必須用引號括起,否則會報錯"NameError: name 'abc' is not defined",而raw_input()任何型別輸入都可接受; (2). raw_input()將所有輸入作為字串,傳回string,而input()輸入純數字時具有自己的特性,傳回輸入的數字型別int或float.舉例解釋如下:
#SyntaxError语法错误 >>> 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纯数字 数据类型 >>> weight = input("weight:") weight:12.5 >>> type(weight) <type 'float'> #raw_input 数据类型均为str >>> age = raw_input("age:") age:20 >>> type(age) <type 'str'>
二. 函數之系統提供內部函數
python提供的系統內部函式庫函數主要講述四種型別:(引自影片,只簡單介紹)
1.字串函數庫
透過help(str)可以查詢字串函數庫,其中查詢過程中"-More-"輸入回車實作滾動訊息,輸出"q"退出幫助(Quit).字串函數大家都比較熟悉,無論C\C++\C#\Java都學過很多,而且基本上大同小異.如:
islower ()函數判斷字串是否大小寫,一個大寫回傳False.前面所使用的format()函數、求字串長度len()函數皆屬於字串函數函式庫,help(str.replace)可以查詢特定函數用法,此函數用於新字串替換舊字串.
#判断字符串是否小写 >>> str1 = "Eastmount" >>> str1.islower() False #字符串替换 >>> str2 = 'adfababdfab' >>> str2.replace('ab','AB') 'adfABABdfAB' #字符串求长度 >>> print(len(str2)) 11 >>>
#2.數學函數庫##
使用数学函数库时需要注意的是导入库"import math",该库中函数我们也非常熟悉,如sin()求正弦,cos()求余弦,pow(x,y)计算x的y次幂,如pow(3,4)=3*3*3*3,python中也可以使用3**4表示.help(math)中可以查看详细信息,而且库中定义了两个常数DATA:
e = 2.718281... pi = 3.14159265...
#导入math库 >>> import math >>> print math.pi 3.14159265359 #计算sin30度 >>> val = math.sin(math.pi/6) >>> print val 0.5 #pow函数 >>> 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.网络编程库
系统提供内部库函数中网络编程库,我此处仅仅举个简单例子,socket(套接字网络编程)获取主机ip地址这是非常常见的运用,我将与C#网络编程进行简单对比.后面的博文中将详细讲述python网络编程.
>>> import socket >>> baiduip = socket.gethostbyname('www.baidu.com') >>> print baiduip 61.135.169.125
其中socket编程很常用,gethostbyname()返回指定主机ip,而C#中获取百度网址的ip地址代码如下所示.代码中可能会出现"警告:Dns.GetHostByName()函数已过时",可替换为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主机名的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.操作系统(OS)函数库
操作系统库函数引用"import os",举例获取当前工作路径和先死当前路径下的文件和目录.使用os.system("cls")可以实现清屏功能.安装python目录Lib文件夹下含有很多py库文件供使用.
>>> import os #获取当前工作路径 >>> current = os.getcwd() >>> print current G:\software\Program software\Python\python insert #获取当前路径下的文件和目录 >>> 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'] >>>
三. 函数之第三方提供函数库及安装httplib2模块过程
(一).安装第三方函数库httplib2过程
Python中第三方开源项目中提供函数库供我们使用,比如使用httplib2库函数.在Linux中直接使用"easy_install httplib2"搜索自动安装,Windows下python开发工具IDLE里安装httplib2模块的过程如下(其他模块类似).
1.下载httplib2模块"https://code.google.com/p/httplib2/"到指定目录,解压压缩包"httplib2_0.8.zip"到某目录下,如果该网址google访问失败,可以到此处下载:
2.配置python运行环境
右键"计算机"->"属性"->在"系统"中选择"高级系统设置"->在"系统属性"中"高级"选择"环境变量"
在系统环境变量Path后添加python安装目录"G:\software\Program software\Python\python insert"
3.在dos下安装httpLib2
管理员模式运行cmd,利用cd命令进入httplib2_0.8.zip解压目录,输入"python settup.py install",如下图所示安装成功.
4.使用httplib2
如果httplib2库函数没有安装成功,"import httplib2"会提示错误"ImportError: No module named httplib2".否则安装成功,举例如下.
import httplib2 #获取HTTP对象 h = httplib2.Http() #发出同步请求并获取内容 resp, content = h.request("http://www.csdn.net/") #显示返回头信息 print resp #显示网页相关内容 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'}
(二).简单网页爬虫示例
使用第三方函数库时的具体格式为module_name.method(parametes) 第三方函数名.方法(参数).
讲述一个引用web库,urllib库访问公网上网页,webbrowser库调用浏览器操作,下载csdn官网内容并通过浏览器显示的实例.
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")
它会输出True并在浏览器中打开下载的静态网页.引用import webbrowser as web使用web,也可以直接引用,使用时"module_name.method"即可.
content = urllib.urlopen(url).read()表示打开url并读取赋值
open("soso.html","w").write(content)表示在python安装目录写静态soso.html文件
web.open_new_tab("soso.html")表示打开该静态文件新标签.
同样可以使用web.open_new_tab('http://www.soso.com')直接在浏览器打开动态网页.效果如下图所示:
四. 函数之自定义函数
1.无返回值自定义函数
其基本语法格式如下:
def function_name([parameters]): 函数名([参数]),其中参数可有可无 (TAB) statement1 (TAB) statement2 ...
注意:
(1).自定义函数名后面的冒号(:)不能省略,否则报错"invalid syntax",而且无需像C语言一样加{};
(2).函数里每条语句前都有缩进TAB,否则会报错"There's an error in your programs:expected an indented block",它的功能相当于区分函数里的语句与函数外的语句.
举例:打开IDLE工具->点击栏"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文件里点击Run->Run Module.输出结果如下图所示,其中fun1()函数无形参自定义函数,fun2(val1,val2)是有形参自定义函数,fun2(8,15)为函数的调用,实参8和15.
2.有返回值自定义函数
其基本语法格式如下:
def funtion_name([para1,para2...paraN]) statement1 statement2 .... return value1,value2...valueN
返回值支持一个或多个返回,需要注意的是自定义函数有返回值,主调函数就需要接受值(接受返回的结果).同时在定义变量时可能sum这些可能是关键字(注意颜色),最好使用不是关键字的变量.举例:
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
输出结果如下,其中需要注意的是参数一一对应,在除法中2/10=0,**幂运算2的10次方=1024.而使用re=fun3(2,10)直接输出的结果成为元组,后面会详细讲述,(12,-8,20,0,1024)元组中re[0]存储12,re[1]存储-8,依次~
2 10 the result are 12 -8 20 0 1024 2 10 (12, -8, 20, 0, 1024)
3.自定义函数参数含预定义
预设值的基本格式如下:
def function_name(para1,para2...parai=default1...paran=defaultn) statement1 statement2 ... return value1,value2...valuen
其中需要注意的是预定义值得参数不能先于无预定义值参数,举个例子讲解.
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
输出结果如下图所示,预定义的参数在调用时,实参可以省略,也可以替换默认定义的预定义值.
2 3 10 result1 = 15 2 3 5 result2 = 10
其中如果函数定义为def fun4(n3=10,n2,n1)就会报错"non-default argument follows default argument"(没预定义的参数在预定义参数的后面),所以定义函数时需要注意该点.
同时需要注意函数调用时的赋值顺序问题,最好采用一对一复制,也可以函数调用中给出具体形参进行赋值,但需要注意的是在函数调用过程中(使用函数时),有预定义值的参数不能先于无预定义值参数被赋值.
如例子中自定义函数def fun4(n1,n2,n3=10),在调用时可以:
(1).s=fun4(2,3)省略预定义参数,它是一对一赋值,其中n1赋值2、n2赋值3、n3赋值10(预定义)
(2).s=fun4(4,n2=1,n3=12)它也是一对一赋值,而且预定义值n3替换为12
(3).s=fun4(n2=1,n1=4,n3=15)它的顺序与定义函数没有对应,但是调用时给出具体对应也行
下面的情况就会出现所述的"有预定义值的参数先于无预定义值参数被赋值"错误:
(1).s=fun4(n3=12,n2=1,4)此时会报错"non-keyword arg after keyword arg",它不能指定n1=4,就是没有指定预定值n1=4在有预定值n3=12,n2=1之后,如果改成s=fun4(4,n2=1,n3=12)或s=fun4(4,n3=12,n2=1)即可.
(2).s=fun4(4,n1=2)此时也会报错"TypeError: fun4() got multiple values for keyword argument 'n1'",它不能指定n1=2&n2=4,而是n1会赋值多个.
所以,最好還是一一對應的呼叫函數,平時寫程式沒有這樣去刁難自己,對應即可
總結:文章從系統提供的內部函數、第三方提供函數庫+簡單爬出程式碼及安裝httplib2模組過程和用戶自定函數三個面向進行講述.文章中如果有錯誤或不足之處,海涵~最後感謝那個視頻老師和上述博主、書籍老師及me.
以上是Python函數的基礎知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!