python基礎整理1

 

基礎知識

 名字與對象,類與類型

變量:在Python中,存儲一個數據,須要一個叫作變量的東西   num2 = 87 #num2是一個變量html

變量的類型:python

程序中爲了更充分的利用內存空間以及更有效率的管理內存,變量是有不一樣的類型的,以下所示:shell

 

 

輸入:python3版本中  input    python2中raw_input()express

輸出:print編程

 

 

內置對象,自定義對象,實列化數據結構

 

 

 

 

 關鍵字:python一些具備特殊功能的標示符,這就是所謂的關鍵字閉包

關鍵字,是python已經使用的了,因此不容許開發者本身定義和關鍵字相同的名字的標示符函數式編程

 

 

 

 

數據類型

一、      數字:用於存儲數值。包括整型(Int),長整型(long integers) ,浮點型(floating point real values),複數(complex numbers)
函數

二、      布爾值     真或假  1 或 0工具

三、      字符串  :雙引號或者單引號中的數據,就是字符串

 

字符串經常使用功能:

  • 移除空白
  • 分割
  • 長度
  • 索引
  • 切片

四、      列表:列表使用方括號——[]

基本操做:

  • 索引
  • 切片
  • 追加
  • 刪除
  • 長度
  • 循環
  • 包含

五、元祖  :元組的元素不能修改。元組使用小括號——()組建立很簡單,只須要在括號中添加元素,並使用逗號隔開便可

基本操做:

  • 索引
  • 切片
  • 循環
  • 長度
  • 包含

六、字典(無序):字典的每一個鍵值 key=>value 對用冒號 : 分割,每一個鍵值對之間用逗號 , 分割,整個字典包括在花括號 {} 中

 

 經常使用操做:

  • 索引
  • 新增
  • 刪除
  • 鍵、值、鍵值對
  • 循環
  • 長度

 

遍歷

 

經過for ... in ...:的語法結構,咱們能夠遍歷字符串、列表、元組、字典等數據結構。

 

注意python語法的縮進

 

字符串遍歷

 

>>> a_str = "hello itcast" >>> for char in a_str: ... print(char,end=' ') ... h e l l o i t c a s t 

 

列表遍歷

 

>>> a_list = [1, 2, 3, 4, 5] >>> for num in a_list: ... print(num,end=' ') ... 1 2 3 4 5 

 

元組遍歷

 

>>> a_turple = (1, 2, 3, 4, 5) >>> for num in a_turple: ... print(num,end=" ") 1 2 3 4 5 

 

字典遍歷

 

<1> 遍歷字典的key(鍵)

 

<2> 遍歷字典的value(值)

 

 

<3> 遍歷字典的項(元素)

 

 

<4> 遍歷字典的key-value(鍵值對)

 

 

可變類型與不可變類型

可變類型,值能夠改變:

  • 列表 list
  • 字典 dict

不可變類型,值不能夠改變:

  • 數值類型 int, long, bool, float
  • 字符串 str
  • 元組 tuple

 

流程控制

分支結構

需求1、用戶登錄驗證

# 提示輸入用戶名和密碼
  
# 驗證用戶名和密碼
#     若是錯誤,則輸出用戶名或密碼錯誤
#     若是成功,則輸出 歡迎,XXX!
 
需求2、根據用戶輸入內容輸出其權限
# 根據用戶輸入內容打印其權限
  
# alex --> 超級管理員
# eric --> 普通管理員
# tony,rain --> 業務主管
# 其餘 --> 普通用戶

 

循環結構

1:while循環

while 條件:

# 循環體
 # 若是條件爲真,那麼循環體則執行
# 若是條件爲假,那麼循環體不執行
 
二、break

break用於退出全部循環

三、continue

continue用於退出當前循環,繼續下一次循環

 

函數——爲了提升編寫的效率以及代碼的重用,因此把具備獨立功能的代碼塊組織爲一個小模塊,這就是函數,函數式編程最重要的是加強代碼的重用性和可讀自性

python內置函數

 

 

 

Python包含了如下內置函數

 

 

 

序號 方法 描述
1 cmp(item1, item2) 比較兩個值
2 len(item) 計算容器中元素個數
3 max(item) 返回容器中元素最大值
4 min(item) 返回容器中元素最小值
5 del(item) 刪除變量

 

注意:cmp在比較字典數據時,先比較鍵,再比較值。

 

注意:len在操做字典數據時,返回的是鍵值對個數。

 

del有兩種用法,一種是del加空格,另外一種是del()

 

 

Python 內置函數

    內置函數    
abs() divmod() input() open() staticmethod()
all() enumerate() int() ord() str()
any() eval() isinstance() pow() sum()
basestring() execfile() issubclass() print() super()
bin() file() iter() property() tuple()
bool() filter() len() range() type()
bytearray() float() list() raw_input() unichr()
callable() format() locals() reduce() unicode()
chr() frozenset() long() reload() vars()
classmethod() getattr() map() repr() xrange()
cmp() globals() max() reverse() zip()
compile() hasattr() memoryview() round() __import__()
complex() hash() min() set()  
delattr() help() next() setattr()  
dict() hex() object() slice()  
dir() id() oct() sorted() exec 內置表達式

自定義函數

def 函數名(參數):
       
    ...
    函數體
    ...
    返回值

 

函數的定義主要有以下要點:

  • def:表示函數的關鍵字
  • 函數名:函數的名稱,往後根據函數名調用函數
  • 函數體:函數中進行一系列的邏輯計算,如:發送郵件、計算出 [11,22,38,888,2]中的最大數等...
  • 參數:爲函數體提供數據
  • 返回值:當函數執行完畢後,能夠給調用者返回數據。(函數是一個功能塊,該功能到底執行成功與否,須要經過返回值來告知調用者。)

 

調用函數

定義了函數以後,就至關於有了一個具備某些功能的代碼,想要讓這些代碼可以執行,須要調用它

調用函數很簡單的,經過 函數名() 便可完成調用

 

函數參數(一)

<1> 定義帶有參數的函數

示例以下:

def add2num(a, b): c = a+b print c 

<2> 調用帶有參數的函數

以調用上面的add2num(a, b)函數爲例:

def add2num(a, b): c = a+b print c add2num(11, 22) #調用帶有參數的函數時,須要在小括號中,傳遞數據
  • 定義時小括號中的參數,用來接收參數用的,稱爲 「形參」
  • 調用時小括號中的參數,用來傳遞給函數用的,稱爲 「實參」

函數返回值(一)

<1>「返回值」介紹

  • 所謂「返回值」,就是程序中函數完成一件事情後,最後給調用者的結果
  • <2>帶有返回值的函數

  • 想要在函數中把結果返回給調用者,須要在函數中使用return

 

<3>保存函數的返回值

若是一個函數返回了一個數據,那麼想要用這個數據,那麼就須要保存

4種函數的類型

函數根據有沒有參數,有沒有返回值,能夠相互組合,一共有4種

  • 無參數,無返回值
  • 無參數,有返回值
  • 有參數,無返回值
  • 有參數,有返回值
  • <1>無參數,無返回值的函數

    此類函數,不能接收參數,也沒有返回值,通常狀況下,打印提示燈相似的功能,使用這類的函數

  • <2>無參數,有返回值的函數

    此類函數,不能接收參數,可是能夠返回某個數據,通常狀況下,像採集數據,用此類函數

  • <3>有參數,無返回值的函數

    此類函數,能接收參數,但不能夠返回數據,通常狀況下,對某些變量設置數據而不需結果時,用此類函數

  • <4>有參數,有返回值的函數

    此類函數,不只能接收參數,還能夠返回某個數據,通常狀況下,像數據處理並須要結果的應用,用此類函數

  • 小總結

    • 函數根據有沒有參數,有沒有返回值能夠相互組合
    • 定義函數時,是根據實際的功能需求來設計的,因此不一樣開發人員編寫的函數類型各不相同

 

函數的嵌套調用

一個函數裏面又調用了另一個函數,這就是所謂的函數嵌套調用 

  • 若是函數A中,調用了另一個函數B,那麼先把函數B中的任務都執行完畢以後纔會回到上次 函數A執行的位置

 

 

局部變量

<1>什麼是局部變量

以下圖所示:

 

 

 

<2>小總結

  • 局部變量,就是在函數內部定義的變量
  • 不一樣的函數,能夠定義相同的名字的局部變量,可是各用個的不會產生影響
  • 局部變量的做用,爲了臨時保存數據須要在函數中定義變量來進行存儲,這就是它的做用

 

 

全局變量

<1>什麼是全局變量

若是一個變量,既能在一個函數中使用,也能在其餘的函數中使用,這樣的變量就是全局變量

 

 

<4>總結1:

  • 在函數外邊定義的變量叫作全局變量
  • 全局變量可以在全部的函數中進行訪問
  • 若是在函數中修改全局變量,那麼就須要使用global進行聲明,不然出錯
  • 若是全局變量的名字和局部變量的名字相同,那麼使用的是局部變量的,小技巧強龍不壓地頭蛇

 

<5>可變類型的全局變量

  • 函數中不使用global聲明全局變量時不能修改全局變量的本質是不能修改全局變量的指向,即不能將全局變量指向新的數據。
  • 對於不可變類型的全局變量來講,因其指向的數據不能修改,因此不使用global時沒法修改全局變量。
  • 對於可變類型的全局變量來講,因其指向的數據能夠修改,因此不使用global時也可修改全局變量。

 

函數參數(二)

1. 缺省參數

調用函數時,缺省參數的值若是沒有傳入,則被認爲是默認值

注意:帶有默認值的參數必定要位於參數列表的最後面。

2.不定長參數

有時可能須要一個函數能處理比當初聲明時更多的參數。這些參數叫作不定長參數,聲明時不會命名。

基本語法以下:

def functionname([formal_args,] *args, **kwargs): "函數_文檔字符串" function_suite return [expression] 

加了星號(*)的變量args會存放全部未命名的變量參數,args爲元組;而加**的變量kwargs會存放命名參數,即形如key=value的參數, kwargs爲字典。

 

3. 引用傳參

Python中函數參數是引用傳遞(注意不是值傳遞)。對於不可變類型,因變量不能修改,因此運算不會影響到變量自身;而對於可變類型來講,函數體中的運算有可能會更改傳入的參數變量。

 

函數使用注意事項

1. 自定義函數

<1>無參數、無返回值

def 函數名(): 語句

<2>無參數、有返回值

def 函數名(): 語句 return 須要返回的數值

注意:

  • 一個函數到底有沒有返回值,就看有沒有return,由於只有return才能夠返回數據
  • 在開發中每每根據需求來設計函數需不須要返回值
  • 函數中,能夠有多個return語句,可是隻要執行到一個return語句,那麼就意味着這個函數的調用完成

<3>有參數、無返回值

def 函數名(形參列表): 語句

注意:

  • 在調用函數時,若是須要把一些數據一塊兒傳遞過去,被調用函數就須要用參數來接收
  • 參數列表中變量的個數根據實際傳遞的數據的多少來肯定

<4>有參數、有返回值

def 函數名(形參列表): 語句 return 須要返回的數值

<5>函數名不能重複


2. 調用函數

<1>調用的方式爲:

函數名([實參列表])

<2>調用時,到底寫不寫 實參

  • 若是調用的函數 在定義時有形參,那麼在調用的時候就應該傳遞參數

<3>調用時,實參的個數和前後順序應該和定義函數中要求的一致

<4>若是調用的函數有返回值,那麼就能夠用一個變量來進行保存這個值

3. 做用域

<1>在一個函數中定義的變量,只能在本函數中用(局部變量)

<2>在函數外定義的變量,能夠在全部的函數中使用(全局變量)

 

 

 

遞歸函數

 

<1>什麼是遞歸函數

 

經過前面的學習知道一個函數能夠調用其餘函數。

 

若是一個函數在內部不調用其它的函數,而是本身自己的話,這個函數就是遞歸函數。

 

 閉包

什麼是閉包:內部函數對外部函數做⽤域⾥變量的引⽤(⾮全局變量),則稱內部函數爲 閉包。

 

 

閉包思考:
1.閉包似優化了變量,原來須要類對象完成的⼯做,閉包也能夠完成 2.因爲閉包引⽤了外部函數的局部變量,則外部函數的局部變量沒有及時釋放,消耗內存

匿名函數

 

用lambda關鍵詞能建立小型匿名函數。這種函數得名於省略了用def聲明函數的標準步驟。

 

lambda函數的語法只包含一個語句,以下:

 

lambda [arg1 [,arg2,.....argn]]:expression

以下實例:

sum = lambda arg1, arg2: arg1 + arg2 #調用sum函數 print "Value of total : ", sum( 10, 20 ) print "Value of total : ", sum( 20, 20 ) 

以上實例輸出結果:

Value of total : 30 Value of total : 40 

Lambda函數能接收任何數量的參數但只能返回一個表達式的值

匿名函數不能直接調用print,由於lambda須要一個表達式

 

應用場合

 

 

 

 

 

 

 

經常使用模塊

 說的通俗點:模塊就比如是工具包,要想使用這個工具包中的工具(就比如函數),就須要導入這個模塊

 

<2>import

 

在Python中用關鍵字import來引入某個模塊,好比要引用模塊math,就能夠在文件最開始的地方用import math來引入。

 

形如:

 

import module1,mudule2... 

 

當解釋器遇到import語句,若是模塊在當前的搜索路徑就會被導入。

 

在調用math模塊中的函數時,必須這樣引用:

 

  模塊名.函數名

有時候咱們只須要用到模塊中的某個函數,只須要引入該函數便可,此時能夠用下面方法實現:

from 模塊名 import 函數名1,函數名2....

不只能夠引入函數,還能夠引入一些全局變量、類等

  • 注意:

    • 經過這種方式引入的時候,調用函數時只能給出函數名,不能給出模塊名,可是當兩個模塊中含有相同名稱函數的時候,後面一次引入會覆蓋前一次引入。也就是說假如模塊A中有函數function( ),在模塊B中也有函數function( ),若是引入A中的function在先、B中的function在後,那麼當調用function函數的時候,是去執行模塊B中的function函數。

    • 若是想一次性引入math中全部的東西,還能夠經過from math import *來實現

<3>from…import

Python的from語句讓你從模塊中導入一個指定的部分到當前命名空間中

語法以下:

from modname import name1[, name2[, ... nameN]] 

例如,要導入模塊fib的fibonacci函數,使用以下語句:

from fib import fibonacci 

注意

  • 不會把整個fib模塊導入到當前的命名空間中,它只會將fib裏的fibonacci單個引入

<4>from … import *

把一個模塊的全部內容全都導入到當前的命名空間也是可行的,只需使用以下聲明:

from modname import * 

注意

  • 這提供了一個簡單的方法來導入一個模塊中的全部項目。然而這種聲明不應被過多地使用。

<5> as

In [1]: import time as tt

    In [2]: time.sleep(1)

<6>定位模塊

當你導入一個模塊,Python解析器對模塊位置的搜索順序是:

  1. 當前目錄
  2. 若是不在當前目錄,Python則搜索在shell變量PYTHONPATH下的每一個目錄。
  3. 若是都找不到,Python會察看默認路徑。UNIX下,默認路徑通常爲/usr/local/lib/python/
  4. 模塊搜索路徑存儲在system模塊的sys.path變量中。變量裏包含當前目錄,PYTHONPATH和由安裝過程決定的默認目錄。

模塊製做

<1>定義本身的模塊

在Python中,每一個Python文件均可以做爲一個模塊,模塊的名字就是文件的名字。

好比有這樣一個文件test.py,在test.py中定義了函數add

test.py

def add(a,b): return a+b 

<2>調用本身定義的模塊

那麼在其餘文件中就能夠先import test,而後經過test.add(a,b)來調用了,固然也能夠經過from test import add來引入

main.py

import test result = test.add(11,22) print(result) 

<3>測試模塊

在實際開中,當一個開發人員編寫完一個模塊後,爲了讓模塊可以在項目中達到想要的效果,這個開發人員會自行在py文件中添加一些測試信息,例如:

test.py

def add(a,b): return a+b # 用來進行測試 ret = add(12,22) print('int test.py file,,,,12+22=%d'%ret) 

若是此時,在其餘py文件中引入了此文件的話,想一想看,測試的那段代碼是否也會執行呢!

main.py

import test result = test.add(11,22) print(result)

總結:

  • 能夠根據__name__變量的結果可以判斷出,是直接執行的python腳本仍是被引入執行的,從而可以有選擇性的執行測試代碼

模塊中的__all__

1. 沒有__all__

 

2. 模塊中有__all__

 

 

 

總結

  • 若是一個文件中有__all__變量,那麼也就意味着這個變量中的元素,不會被from xxx import *時導入
 

 

python中的包

1. 引入包

1.1 有2個模塊功能有些聯繫

 

 

 

1.2 因此將其放到同一個文件夾下

 

 

1.3 使用import 文件.模塊 的方式導入

 

 

1.4 使用from 文件夾 import 模塊 的方式導入

 

 

1.5 在msg文件夾下建立__init__.py文件

1.6 在__init__.py文件中寫入

 

 

1.7 從新使用from 文件夾 import 模塊 的方式導入

總結:

  • 包將有聯繫的模塊組織在一塊兒,即放到同一個文件夾下,而且在這個文件夾建立一個名字爲__init__.py 文件,那麼這個文件夾就稱之爲
  • 有效避免模塊名稱衝突問題,讓應用組織結構更加清晰
  • 2. __init__.py文件有什麼用

    __init__.py 控制着包的導入行爲

    2.1 __init__.py爲空

    僅僅是把這個包導入,不會導入包中的模塊

    2.2 __all__

    __init__.py文件中,定義一個__all__變量,它控制着 from 包名 import *時導入的模塊

    2.3 (瞭解)能夠在__init__.py文件中編寫內容

    能夠在這個文件中編寫語句,當導入時,這些語句就會被執行

    __init__.py文件 

  • 模塊安裝、使用

    1.安裝的方式

    1. 找到模塊的壓縮包
    2. 解壓
    3. 進入文件夾
    4. 執行命令python setup.py install

    注意:

    • 若是在install的時候,執行目錄安裝,可使用python setup.py install --prefix=安裝路徑

    2.模塊的引入

    在程序中,使用from import 便可完成對安裝的模塊使用

    from 模塊名 import 模塊名或者*

相關文章
相關標籤/搜索