亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python初學(xué)筆記

系統(tǒng) 1761 0

通過上班閑暇時間開始學(xué)習(xí)一門腳本語言--python,很早前就有老同學(xué)建議學(xué)習(xí)一門腳本語言對未開開發(fā)會很有幫助,最初考慮選擇哪門語言的時候在python和ruby中糾結(jié)了一下,最后選擇python主要是感覺它的使用用戶更廣。

?

  • 開發(fā)環(huán)境

我是在windows平臺下開發(fā)的,python版本官方推薦的是2.7和3.3,我選擇了后者,附上 下載地址

事實上,對于新手來說,2.x和3.x確實有一些改變,如果你用2.x的幫助文檔在3.x下開發(fā)可能會遇到一些麻煩(比如print由命令變成了函數(shù))。

在windows下安裝完成后可以在開始菜單看到python目錄,打開python(command line)輸入:print("hello world")回車,如果沒有報錯說明安裝成功了。
python初學(xué)筆記
?

  • 編輯器

python官方自帶了IDLE(Python GUI)編輯器(見上圖),當(dāng)然很多老手都推薦使用這款編輯器,希望新手從0開始,使用這種編輯器沒有太多智能提示,很多代碼都必須自己編寫,這樣能提升新手的熟練度。但我覺得這個太麻煩了,所以用了一段時候就放棄了。

隨后選擇的是python-eclipse插件,在eclipse下開發(fā),這個插件比IDLE更好了一步,但是還是不算完美,要安裝pydev可以在eclipse下 下載這個插件

最后在ITEye無意看到一個python編輯器的宣傳--jetbrains pycharm,下載了社區(qū)版試用了一下感覺非常不錯,提示健全,反應(yīng)迅速,一直用到現(xiàn)在。

當(dāng)然我從老王python也看到一些推薦,因為沒試用過就不發(fā)表評論了。

?

  • 學(xué)習(xí)文檔

對于新手,有一本好的入門書籍無疑會讓你學(xué)習(xí)效率事半功倍,我看的是《python基礎(chǔ)教程(第二版)》,里面內(nèi)容非常豐富,跟著文檔邊看邊練,很快就會了。而ITEye的python群組共享了另外兩本python入門電子書《python先入為主》和《簡明Python教程》,前者是老王python給新手的,但是內(nèi)容相當(dāng)淺顯,對我?guī)椭淮螅笳邔ython的數(shù)據(jù)結(jié)構(gòu)、語法等都做了一些總結(jié),建議新手在看了《python基礎(chǔ)教程》之后再去看《簡明python教程》的基礎(chǔ)知識復(fù)習(xí)一下,但是簡明教程中的例子大多跑不起來。

?

  • 代碼筆記

好記性不如爛筆頭,下面就是在學(xué)習(xí)python中做的筆記,內(nèi)容也不多,每隔幾天花半個小時溫習(xí)一下,很快就熟悉了。

      #coding=gbk

#input()用戶獲取用戶輸入
name=input('what is your name?')
#print()用于輸出數(shù)據(jù)給用戶
print ('My name is '+name+'!')

#repr()和str()都可以轉(zhuǎn)換為字符串
#repr()輸出對Python比較友好,而str()的輸出對用戶比較友好
inta = 111
print('repr='+repr(inta)+'  str='+str(inta))

#通過三個雙引號或者單引號可創(chuàng)建換行的長字符串
print("""kaka
xi
laoshi
a""")
#通過\n也可以達(dá)到換行的效果
print("hello\nworld")
#原始字符串r 作用是讓后面的字符串內(nèi)容不轉(zhuǎn)義,類似于XML中的CDATA
print(r"C:\nnd"); #注意:原始字符串不能以\結(jié)尾,即print(r"C:\nnd\")是錯誤的

#常規(guī)序列,java中成為數(shù)組
array1 = ['kakaxi',30]
array2 = ['nanuto',15]
array12 = array1 + array2
print(array12)

#索引,通過索引可以獲取指定數(shù)據(jù)
index = "這是一個索引"
print("第一個字:"+index[0])    #從左到右,從0、1、2...
print("最后一個字:"+index[-1]) #從右到左,從-1、-2、-3...
#17*['th']表示連續(xù)17個'th',\在最后可以讓代碼換行
arraya = ['st','nd','rd'] + 17*['th']\
         +['st','nd','rd'] + 7*['th']\
         +['st']
print(arraya)

#分片,可以截取指定的數(shù)組片段
numbers = [1,2,3,4,5,6,7,8,9,10]
#1,2默認(rèn)為數(shù)字,則必須轉(zhuǎn)為字符串才能輸出repr()
print("取3~6個:"+repr(numbers[3:6]));
print("取最后3個:"+repr(numbers[-3:]));
#[start:end:step]格式前兩個是分片,最后一個是步長
#步長為1表示取全部值
print("步長為1:"+repr(numbers[0::1]))
#步長為2表示每隔1個字取值,依次類推
print("步長為2:"+repr(numbers[0::2]))
#步長不能為0但可以為負(fù)數(shù)可以倒著取值
print("步長為-1:"+repr(numbers[::-1]))
#這種方式可以復(fù)制一個新數(shù)組
numbersCopy = numbers[:]
numbersCopy = numbersCopy[:3]
#numbersCopy改變了,不影響numbers的值
print(repr(numbersCopy));
print(repr(numbers))

#序列相加 這樣會將兩個序列合并到一起
array_add = ['a','b','c'] + ['d','e','f']
#序列相乘 用數(shù)字x乘以一個序列會生成新的序列,而新序列中原來的序列被重復(fù)x次
array_multiply = 5*['demo','test']
#下面是生成一個具有10個空間的空序列,None是內(nèi)置值,類似于java的null
array_none = [None]*10
array_none[0] = '1'
array_none[1] = 2
#分片賦值,可以理解為在索引1前面添加一個序列
array_none[1:1] = [2,3,4]
#del刪除指定序列 del還可以刪除其他類型
del array_none[6:]
print('array_none:'+repr(array_none))

#in判斷是否有指定數(shù)據(jù),返回true,false
inboolean = 'a' in array_add
print(inboolean)

#len()返回序列總共多少個值
print(len(array_add))
#min()返回序列第一個值
print(min(array_add))
#max()返回序列最后一個值
print(max(array_add))

#list()可以將字符串轉(zhuǎn)換為list
print("list()方法:"+repr(list('hello')))

lst = [1,2,3]
#在list后面追加對象
lst.append(4)
print("lst.append():"+repr(lst))

lsta = [1,2,3]
lstb = [4,5,6]
lsta.extend(lstb);
#extend()將序列合并到一起,比+性能要高
print("lst.extend():"+repr(lsta));
#返回第一個匹配的序列索引
print("lst.index():"+repr(lsta.index(2)))
#insert()在指定索引位置新增一個數(shù)據(jù)
lsta.insert(2,'aaa');
#pop()彈出序列最后一位并且返回原值
print("lst.pop()"+repr(lsta.pop()))
#remove()移出列表中第一個匹配項
lsta.remove(1)
#reverse列表反轉(zhuǎn)
lsta.reverse()
#sort列表重新排序
#lsta.sort()

#前面的列表是可變可修改的,下面介紹的元組是不能修改的
tuple1 = (1,2,3)
#一個元組一定要有逗號結(jié)束
tuple2 = (1,)
#創(chuàng)建一個具有3個1的元組
tuple3 = 3*(1,)
#tuple()能將指定數(shù)據(jù)轉(zhuǎn)換成元組
tuple([1,2,3])
tuple('abc')
#元組的索引訪問也很簡單
print("元組[1]:"+str(tuple1[1]))
#元組可以用于map映射中的key,而序列是不行的

#字符串格式化,類似于java的占位符,可以將元組中的數(shù)據(jù)依次填入字符串中補充
str1 = '你%s中%s'
#好像只能是元組才能格式
lstStr1 = ('好','國')
print(str1%lstStr1);
#更多格式化參考:http://www.cnblogs.com/JerySpace/archive/2010/12/17/1909621.html

string = 'This is a string!'
#find返回字符串第一個匹配的索引,沒有匹配返回-1
print("string.find():"+ repr(string.find('is')) )
#join()是split的逆方法,用于將數(shù)組轉(zhuǎn)換為字符串
seq = ['1','2','3','4','5']
sep = '+'
print("join():"+sep.join(seq))
#lower()字符串全部小寫 注:lower會返回一個小寫的字符串,string值不變
print('replace:'+string.lower())
#replace()全部替換匹配的字符串 注:replace會返回一個被替換的字符串,string值不變
print('replace:'+string.replace('is','kaka'))
#split()分割字符串并轉(zhuǎn)換成list
print('split:'+repr( string.split(' ') ))
#strip()去字符串兩頭的空格,類似于java的trim
print(string.strip())

#數(shù)據(jù)結(jié)構(gòu)“字典”,類似于java的map,有key和value之分,每一組值由逗號分隔
map1 = {'kaka':'30','nanuto':'15','sasiki':'15'}
#len()返回字典的總個數(shù)
print("len(d):"+str(len(map1)))
#d[key]直接返回指定key的值
print("d[key]:"+map1['kaka'])
#d[key] = value給指定key賦值
map1['kaka'] = 31
#根據(jù)key刪除指定map
del map1['sasiki']
#判斷是否包含指定key
print("str in map:"+str('nanuto' in map1))
#從map中提取指定key到占位符中
print("map格式化:"+"kaka's age is %(kaka)s" %map1)

map2 = {'A1':'123','A2':'456','A3':'789'}
#copy一份全新的map對象 deepcopy深度復(fù)制
map3 = map2.copy()
#clear清空map
map2.clear();
#get()也是根據(jù)key獲取指定值,比map[index]好的地方是key不存在不會報錯
map2.get('A6')
#items將map分解成一個個對象
map2.items()
#items將map轉(zhuǎn)換成迭代器,依次迭代,比items性能高
#map2.iteritems()
#keys和iterkeys與前面類似,只是迭代map中的key
#values和itervalues迭代獲取map的值
#pop(key)根據(jù)key刪除指定數(shù)據(jù)
map3.pop('A1');
#update利用一個字典更新另一個字段
map3.update(map2);

#import的幾種方式
#import math  調(diào)用math.sqrt(4)
#import math as foobar 調(diào)用foobar.sqrt(4)
#from somemodule import math 調(diào)用somemodule.sqrt(4) 前提:somemodule不能有sqrt方法

stringif = 'abcdefg'
#常規(guī)的if...else...
if stringif.startswith("abc"):
    print("stringif.startswith abc")
else:
    print("stringif.startswith !abc")

#if...elif...else...
if 1==1:
    print("1==1")
elif 2==2:
    #pass關(guān)鍵字不執(zhí)行任何邏輯,開發(fā)人員可能未完成該片段代碼,可以用pass代替防止編譯報錯
    pass
else:
    print("else")

#while循環(huán)只有滿足表達(dá)式才會退出
printstr = input("print 'a'")
whileCount = 0
while printstr != "a":
    #輸入錯誤超過3次則跳出循環(huán)
    if whileCount == 3:
        #break跳出while循環(huán)  continue跳出本次邏輯,執(zhí)行下一次邏輯
        break
    whileCount += 1
    printstr = input("print 'a'")
print("input right!")

forList = ["a","b","c","d","e"]
#for循環(huán)
for for_ in forList:
    print("forList:"+for_)
    
forMap = {"a":"1","b":"2","c":"3"}
#for循環(huán)Map 獲得的是key
for for_ in forMap:
    print("forMap key:"+for_+" value:"+forMap[for_])

#del只能刪除變量名,而變量值是不能(也不需要)被開發(fā)刪除的
delStr = ["刪","除"]
copyDelStr = delStr
del delStr
print("del delStr:"+str(copyDelStr))

#exec方法用于運行字符串類型的python語句
exec("print('exec()')")

    

?

      # coding=gbk

#使用def定義一個新方法
def method1(str):
    return "Your parm is:"+str
print(method1("china"))

#help中傳入方法名就能夠獲得該方法的注釋信息
help(method1)

def combine(parameter):
    #使用globals()['全局變量']的形式可以獲得全局變量名
    print(parameter + globals()['parameter'])
parameter = ' time'
combine('begin')

def combine_():
    #使用global可以在方法內(nèi)修改全局變量y的值
    global y
    y = y + 1
y = 1
combine_()
print("y's value:"+str(y))

#python支持方法中嵌套方法,這種行為可以稱作“閉包”
def multiplier(factory):
    def multiplyByFactory(number):
        return factory*number
    return multiplyByFactory

double = multiplier(2)  #此時獲得的是multiplyByFactory方法
print(repr(double(5)))  #此時獲得的是multiplyByFactory執(zhí)行的返回值

#另一種調(diào)用嵌套方法
print(repr(multiplier(2)(5)))

    

?

      # coding=gbk

#使用def定義一個新方法
def method1(str):
    return "Your parm is:"+str
print(method1("china"))

#help中傳入方法名就能夠獲得該方法的注釋信息
help(method1)

def combine(parameter):
    #使用globals()['全局變量']的形式可以獲得全局變量名
    print(parameter + globals()['parameter'])
parameter = ' time'
combine('begin')

def combine_():
    #使用global可以在方法內(nèi)修改全局變量y的值
    global y
    y = y + 1
y = 1
combine_()
print("y's value:"+str(y))

#python支持方法中嵌套方法,這種行為可以稱作“閉包”
def multiplier(factory):
    def multiplyByFactory(number):
        return factory*number
    return multiplyByFactory

double = multiplier(2)  #此時獲得的是multiplyByFactory方法
print(repr(double(5)))  #此時獲得的是multiplyByFactory執(zhí)行的返回值

#另一種調(diào)用嵌套方法
print(repr(multiplier(2)(5)))

#創(chuàng)建類
class Person:
    def setName(self,name):
        self.name = name
    def getName(self):
        return self.name
    def printName(self):
        print("Your name is:"+self.name)

kaka = Person()
lami = Person()
kaka.setName("kaka")
lami.name = "lami"
kaka.printName()
lami.printName()

class SecurityClass:
    def publicMethod(self):
        print("This is publicMethod")
        self.__privateMethod()
    def __privateMethod(self):#雙下劃線表示對外隱藏的方法
        print("This is privateMethod")

security = SecurityClass()
security.publicMethod()

#繼承父類,通過Class(父類)的形式即可繼承父類
class ChlildClass(SecurityClass):
    def publicMethod(self):
        print("This is  childClass's publicMethod")
chlildClass = ChlildClass()
chlildClass.publicMethod()

#可繼承多個父類
class ChildsClass(SecurityClass,Person):
    pass

#issubclass(子類,父類)用于判斷子類是否繼承父類
print("是否繼承父類:"+repr(issubclass(ChlildClass,SecurityClass)))
print("是否繼承父類:"+repr(issubclass(SecurityClass,ChlildClass)))
#通過Class.__bases__可獲得該類繼承的所有子類
print("基類集合:"+repr(ChlildClass.__bases__))
print("判斷對象是否有該方法:"+repr(hasattr(ChlildClass,'publicMethod')))

#自定義異常
class BusinessException(Exception):
    pass

#try...except...捕獲異常
try:
    print(repr(3/0))
except ZeroDivisionError:
    if 1==1:
        print("3/0異常!")
    else:
        raise  #拋出異常

try:
    print(repr(3/0))
except (ZeroDivisionError,Exception):#可以通過園組的形式監(jiān)聽多種異常
        print("3/0異常!")

try:
    print(repr(3/0))
except (ZeroDivisionError,Exception) as e:#通過Exception as e獲取異常信息
        print("異常e:"+repr(e))

#except...else...finally...三者可以混用
try:
    print(repr(3/0))
except (ZeroDivisionError,Exception) as e:#通過Exception as e獲取異常信息
    print("異常e:"+repr(e))
else:
    print("無異常")
finally:
    print("finally代碼塊!")

class Demo(SecurityClass):
    #__init__構(gòu)造方法用于對象創(chuàng)建時使用,__del__析構(gòu)方法用于對象銷毀時調(diào)用
    def __init__(self,name='demo'):
        SecurityClass.__init__(self) #可以調(diào)用父類的構(gòu)造方法
        self.name = name

demo = Demo()
print(demo.name)

demo2 = Demo('demo...')
print(demo2.name)

#靜態(tài)方法
class StaticClass:
    @staticmethod
    def sMethod():
        print("This is static method!")

    @classmethod
    def cMethod(cls):
        print("This is class method!",cls)

StaticClass.sMethod()
StaticClass.cMethod()

nested = [[1,2],[3,4],[5]]
def demoMethod(nested):
    for lst1 in nested:
        for lst2 in lst1:
            yield lst2 #簡單生成器,可當(dāng)做迭代器使用

for number in demoMethod(nested):
    print(number)

#遞歸生成器,可處理無限層數(shù)的列表
def yieldMethod(nested):
    for lst1 in nested:
        for lst2 in yieldMethod(lst1):
            yield lst2


    

?

      __author__ = 'Administrator'
#coding=gbk

#讀寫文件
source = "C:\\copy\\alibaba.txt"

newWord = '''
大家好

才是真的

好!
'''
#第一種寫文件
f = open(source,'w') #w寫
f.write(newWord)
f.close()


#第一種讀全部內(nèi)容
f = open(source) #默認(rèn)只讀
try:
    print(f.read())
finally:
    f.close()

#第二種在文件末尾追加
f = open(source,'a')
f.write("你好python!")
f.close()

#第二種一行一行讀
print("====第二種====")
f = open(source,'r') #r為只讀
while True:
    line = f.readline()
    if not line:
        break
    print(line)#奇怪的是每一行都會換行
f.close()

#注:在大文件下使用readlines(sizehint)比使用read性能要好,原因是前者可以定義緩沖區(qū)最大閥值,而后者會占用全部緩沖區(qū).writelines同理!
#更多文件讀寫,參考http://www.cnblogs.com/allenblogs/archive/2010/09/13/1824842.html
    

?

      __author__ = 'Administrator'
#coding=gbk

import sqlite3
import time

#使用sqlLite進(jìn)行數(shù)據(jù)庫操作
#sqlLite在高版本python已經(jīng)成為內(nèi)置包,所以可以不用引入任何第三方插件使用

#connect傳入?yún)?shù)是數(shù)據(jù)庫文件,可以是絕對路徑,也可以是相對路徑,如果已存在則直接使用,不存在則創(chuàng)建一個新庫
conn = sqlite3.connect("testDB.db")
curs = conn.cursor()
conn.commit()
conn.close()

def executeSQL():
    createStr = '''
    CREATE TABLE food(
    id    TEXT PRIMARY KEY,
    name  TEXT,
    price FLOAT
    )
    '''
    conn = sqlite3.connect("testDB.db")
    curs = conn.cursor()

    #①執(zhí)行表添加操作
    try:
        curs.execute(createStr)
    except sqlite3.OperationalError as e:
        conn.rollback()
        print(repr(e))

    #②執(zhí)行數(shù)據(jù)添加操作
    insert = "INSERT INTO food VALUES(?,?,?)"
    values = [time.strftime("%Y%m%d%H%M%S"),'面包',5]
    try:
        curs.execute(insert,values)
        conn.commit()
        print("insert success!")
    except sqlite3.ProgrammingError:
        conn.rollback()
        raise

    #③執(zhí)行數(shù)據(jù)查詢操作
    query = "SELECT * FROM food"
    curs.execute(query)
    for row in curs.fetchall():
        valueStr = ""
        for value in row:
            #因為price字段是float,所以要str(),如果用repr又是另一種景象,自己嘗試
            valueStr = valueStr + str(value) + "  "
        print(valueStr)
    conn.close()

executeSQL()
    

?

python初學(xué)筆記


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本一级特黄aa大片24免费 | 91视频专区 | 欧美亚洲日本国产综合网 | 性欧美疯狂猛交69hd | 911免费视频 | 综合欧美日韩一区二区三区 | 成人在线不卡视频 | 欧美在线一级毛片视频 | 久久精品国产午夜伦班片 | 色综色| 国产3区| 欧美一级毛片片免费 | 亚洲一区二区三区免费观看 | 久久亚洲网| 亚洲婷婷网| 激情久久久久久久久久 | 久久久网久久久久合久久久久 | 亚洲精品影院一区二区 | xxxx久久| 老子影院午夜久久亚洲 | 免费观看国产精品 | 毛片久久久 | 夜夜躁日日躁狠狠 | 久久美剧免费在线观看 | 亚洲精品国产美女在线观看 | 桃色婷婷 | 国产一区亚洲二区 | 真人午夜a一级毛片 | 精品一区二区乱码久久乱码 | 高h粗大强行撑开紧窄的嫩缝 | 青青久久国产成人免费网站 | 大色综合色综合网站 | 欧美白人极品性喷潮 | 干干操操 | 热伊人99re久久精品最新地 | 精品性久久 | 香蕉免费一区二区三区在线观看 | 欧美亚洲大片 | 国产精品所毛片视频 | 免费中文字幕在线国语 | 久草在线中文最新视频 |