Python基礎(chǔ)

@貳拾貳畫生


感謝?簡明Python教程


輸入輸出

輸入:raw_input

string = raw_input('Enter something:')

輸出:print

s = 'aaa'

i = 1

print string; print 's = %s, i = %d', (s, i)

--------------------------------------------------------

字符串

單引號’ 雙引號” 或三引號’’’ “”"?三引號指示一個多行的字符串如

‘’'fdalkjflksajfkl

fdafdsa

fda’''

--------------------------------------------------------

字符串中轉(zhuǎn)義字符?\

自然字符串,指示某些不需要如轉(zhuǎn)義符那樣的特別處理的字符串,字符串前加r或R

r”Newlines are indicated by \n"

Unicode字符串:前加u或U

u”This is a Unicode string"

--------------------------------------------------------

級連字符串

兩個字符串按字面意義相鄰放著

‘What\’s?’ ‘your name?’

會被自動轉(zhuǎn)成

“What’s your name?”

--------------------------------------------------------

多個物理行寫一個邏輯行

s = ’This is a string. \

This continues the string.'

print s

輸出為:This is a string. This continues the string.

同理

print \

i

等同于

print i

--------------------------------------------------------

#if else 語句

number = 23

? ? ? ?guess =int(raw_input('Enter an integer : '))

if guess == number:

? ? ? print 'Congratulations, you guessed it.'

? ? ? print "(but you do not win any prizes!)"

elif guess < number:

? ? ? print 'No, it is a little higher than that'

else:

? ? ? print 'No, it is a little lower than that'

print 'Done'

--------------------------------------------------------

# while語句

number =23

running =True

while running:

? ? ? guess = int(raw_input('Enter an integer : '))

? ? ? if guess == number:

? ? ? ? ? ? print 'Congratulations, you guessed it.'

? ? ? ? ? ? running =False

? ? ? elif guess < number:

? ? ? ? ? ? print 'No, it is a little higher than that'

? ? ? else:

? ? ? ? ? ? print 'No, it is a little lower than that'

else:

? ? ?print 'The while loop is over.'

print 'Done'

--------------------------------------------------------

break 語句

while True:

? ? ? s = raw_input('Enter something : ')

? ? ? if s == 'quit':

? ? ? ? ? ? break

? ? ? print 'Length of the string is', len(s)

print 'Done'

--------------------------------------------------------

continue 語句

continue語句被用來告訴Python跳過當(dāng)前循環(huán)塊中的剩余語句,然后繼續(xù)進行下一輪循環(huán)仇穗。

while True:

? ? ? s = raw_input('Enter something : ')

? ? ? if s == 'quit':

? ? ? ? ? ? break

? ? ? if len(s) <3:

? ? ? ? ? ?continue

? ? ? print 'Input is of sufficient length'

輸出結(jié)果為:

Enter something : a

Enter something : 12

Enter something : abc

Input is of sufficient length

Enter something : quit

--------------------------------------------------------

函數(shù)用?def 關(guān)鍵字來定義

def printMax(a, b):

? ? ? if a > b:

? ? ? ? ? ? ?print a, ' is maximum'

? ? ? else:

? ? ? ? ? ? print b, ' is maximum'

print Max(3,4)

x =5

y =7

print Max(x, y)

輸出:

4 is maximum

7 is maximum

--------------------------------------------------------

使用 global 定義全局變量

def func():

? ? ? global x

? ? ? print 'x is', x

? ? ? x = 2

? ? ? print 'Changed local x to', x

x = 50

func()

print 'Value of x is', x

輸出:

x is 50

Changed global x to 2

Value of x is 2

--------------------------------------------------------

可選的默認參數(shù)

def say(message, times = 1):

? ? ? print message * times

say('Hello')

say('World', 5)

輸出:

Hello

WorldWorldWorldWorldWorld

注意:只有在形參表末尾的那些參數(shù)可以有默認參數(shù)值辜膝,即你不能在聲明函數(shù)形參的時候雹熬,先聲明有默認值的形參而后聲明沒有默認值的形參腰涧。例如,def func(a, b=5)是有效的象浑,但是def func(a=5, b)是無效的。

--------------------------------------------------------

關(guān)鍵參數(shù)

def func(a, b=5, c=10):

? ? ? print 'a is ', a, ' and b is ', b, ' and c is ', c

func(3, 7)

func(25, c=24)

func(c=50, a=100)

輸出:

a is 3 and b is 7 and c is 10

a is 25 and b is 5 and c is 24

a is 100 and b is 5 and c is 50

--------------------------------------------------------

函數(shù)返回

def maximum(x, y):

? ? ? if x > y:

? ? ? ? ? ? return x

? ? ? else:

? ? ? ? ? ? return y

print maximum(2,3)

輸出:

3

注意:沒有返回值的return語句等價于return None琅豆。None是Python中表示沒有任何東西的特殊類型愉豺。例如,如果一個變量的值為None茫因,可以表示它沒有值蚪拦。

--------------------------------------------------------

使用DocStrings

def printMax(x, y):

? ? ? ?'''Prints the maximum of two numbers.

? ? ? The two values must be integers.'''

? ? ? x = int(x)

? ? ? y = int(y)

? ? ? if x > y:

? ? ? ? ? ? print x, 'is maximum'

? ? ? else:

? ? ? ? ? ? print y,'is maximum'

print Max(3,5)

print printMax.__doc__

輸出:

5 is maximum

Prints the maximum of two numbers.

The two values must be integers.

DocStrings 也適用于模塊和類。

--------------------------------------------------------

模塊

模塊的文件名必須以 .py 為擴展名

使用?sys 模塊

import sys

print 'The command line arguments are:'

? ? ? for i in sys.argv:

? ? ? ? ? ? print i

print '\n\nThe PYTHONPATH is', sys.path, '\n'

輸出

The command line arguments are:

using_sys.py

we

are

arguments

The PYTHONPATH is ['/home/swaroop/byte/code', '/usr/lib/python23.zip',

'/usr/lib/python2.3', '/usr/lib/python2.3/plat-linux2',

'/usr/lib/python2.3/lib-tk', '/usr/lib/python2.3/lib-dynload',

'/usr/lib/python2.3/site-packages', '/usr/lib/python2.3/site-packages/gtk-2.0']

sys模塊包含了與Python解釋器和它的環(huán)境有關(guān)的函數(shù)冻押。

腳本的名稱總是sys.argv列表的第一個參數(shù)驰贷。所以,在這里翼雀,'using_sys.py'是sys.argv[0]饱苟、'we'是sys.argv[1]、'are'是sys.argv[2]以及'arguments'是sys.argv[3]

--------------------------------------------------------

字節(jié)編譯的.pyc文件

輸入一個模塊相對來說是一個比較費時的事情狼渊,所以Python做了一些技巧箱熬,以便使輸入模塊更加快一些。一種方法是創(chuàng)建字節(jié)編譯的文件狈邑,這些文件以.pyc作為擴展名城须。字節(jié)編譯的文件與Python變換程序的中間狀態(tài)有關(guān)(是否還記得Python如何工作的介紹?)米苹。當(dāng)你在下次從別的程序輸入這個模塊的時候糕伐,.pyc文件是十分有用的——它會快得多,因為一部分輸入模塊所需的處理已經(jīng)完成了蘸嘶。另外良瞧,這些字節(jié)編譯的文件也是與平臺無關(guān)的陪汽。所以,現(xiàn)在你知道了那些.pyc文件事實上是什么了褥蚯。

--------------------------------------------------------

from..import語句

如果你想要直接輸入argv變量到你的程序中(避免在每次使用它時打sys.)挚冤,那么你可以使用from sys import argv語句。如果你想要輸入所有sys模塊使用的名字训挡,那么你可以使用from sys import *語句。這對于所有模塊都適用歧强。一般說來澜薄,應(yīng)該避免使用from..import而使用import語句,因為這樣可以使你的程序更加易讀摊册,也可以避免名稱的沖突肤京。

--------------------------------------------------------

模塊的__name__

每個模塊都有一個名稱,在模塊中可以通過語句來找出模塊的名稱丧靡。這在一個場合特別有用——就如前面所提到的蟆沫,當(dāng)一個模塊被第一次輸入的時候,這個模塊的主塊將被運行温治。假如我們只想在程序本身被使用的時候運行主塊饭庞,而在它被別的模塊輸入的時候不運行主塊,我們該怎么做呢熬荆?這可以通過模塊的__name__屬性完成舟山。

if __name__ == '__main__':

? ? ? print 'This program is being run by itself'

else:

? ? ? print 'I am being imported from another module'

輸出:

This program is being run by itself

>>> import using_name

I am being imported from another module

--------------------------------------------------------

創(chuàng)建及引用模塊

創(chuàng)建自己的模塊:

#Filename: mymodule.py

def sayhi():

? ? ? print 'Hi, this is mymodule speaking.'

version ='0.1'

在與該模塊的同等目錄下

import mymodule

mymodule.sayhi()

print 'Version ', mymodule.version

輸出:

Hi, this is mymodule speaking.

Version 0.1

--------------------------------------------------------

dir() 函數(shù)

用來列出模塊定義的標識符。標識符有函數(shù)卤恳、類和變量

如上例累盗,執(zhí)行

?dir(mymodule)

輸出:

['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'sayhi', 'version']

如果不給?dir 函數(shù)傳遞參數(shù),默認地突琳,它會返回當(dāng)前模塊的屬性列表若债。

--------------------------------------------------------

Python 中有三種內(nèi)建的數(shù)據(jù)結(jié)構(gòu):列表、元組和字典拆融。

--------------------------------------------------------

列表

shoplist = ['apple', 'mango', 'carrot', 'banana']

print 'I have ', len(shoplist), ' items to purchase.'

print 'These items are:', # Notice the comma at end of the line

for item in shoplist:

? ? ? print item,

print '\nI also have to buy rice.'

shoplist.append('rice')

print 'My shopping list is now', shoplist

print 'I will sort my list now'

shoplist.sort()

print 'Sorted shopping list is', shoplist

print 'The first item I will buy is', shoplist[0]

olditem = shoplist[0]

del shoplist[0]

print 'I bought the', olditem

print 'My shopping list is now', shoplist

輸出:

I have 4 items to purchase.

These items are: apple mango carrot banana

I also have to buy rice.

My shopping list is now ['apple', 'mango', 'carrot', 'banana', 'rice']

I will sort my list now

Sorted shopping list is ['apple', 'banana', 'carrot', 'mango', 'rice']

The first item I will buy is apple

I bought the apple

My shopping list is now ['banana', 'carrot', 'mango', 'rice']

--------------------------------------------------------

元組

元組和列表十分類似蠢琳,只不過元組和字符串一樣是不可變的,即你不能修改元組镜豹。

zoo = ('wolf', 'elephant', 'penguin')

print 'Number of animals in the zoo is', len(zoo)

new_zoo = ('monkey', 'dolphin', zoo)

print 'Number of animals in the new zoo is', len(new_zoo)

print 'All animals in new zoo are', new_zoo

print 'Animals brought from old zoo are', new_zoo[2]

print 'Last animal brought from old zoo is', new_zoo[2][2]

輸出:

Number of animals in the zoo is 3

Number of animals in the new zoo is 3

All animals in new zoo are ('monkey', 'dolphin', ('wolf', 'elephant', 'penguin'))

Animals brought from old zoo are ('wolf', 'elephant', 'penguin')

Last animal brought from old zoo is penguin

有0個項目的元組:myempty = ()

有1個項目的元組:singleton = (1, )

--------------------------------------------------------

元組與打印語句

age =22

name = 'Swaroop'

print ' %s is %d years old.’ % (name, age) #此句等同:print name, ‘ is ‘, age, ‘ years old.'

print 'Why is %s playing with that python?' % name

輸出:

Swaroop is 22 years old

Why is Swaroop playing with that python?

--------------------------------------------------------

字典

ab = { ? 'Swaroop' ?: ?'swaroopch@byteofpython.info',

? ? ? ? ? ? ? 'Larry' ? ? : ?'larry@wall.org',

? ? ? 'Matsumoto' ? : ?'matz@ruby-lang.org',

? ? ?'Spammer' ? ? ? : ?'spammer@hotmail.com'

}

print "Swaroop's address is %s" % ab['Swaroop']

ab['Guido'] = 'guido@python.org'

del ab['Spammer']

print '\nThere are %d contacts in the address-book\n' % len(ab)

for name, address in ab.items():

? ? ? print 'Contact %s at %s' % (name, address)

if 'Guido' in ab:

print "\nGuido's address is %s" % ab['Guido']

輸出:

Swaroop's address isswaroopch@byteofpython.info

There are 4 contacts in the address-book

Contact Swaroop atswaroopch@byteofpython.info

Contact Matsumoto atmatz@ruby-lang.org

Contact Larry atlarry@wall.org

Contact Guido atguido@python.org

Guido's address isguido@python.org

--------------------------------------------------------

序列

序列的兩個主要特點是索引操作符和切片操作符傲须。索引操作符讓我們可以從序列中抓取一個特定項目。切片操作符讓我們能夠獲取序列的一個切片趟脂,即一部分序列泰讽。

shoplist = ['apple', 'mango', 'carrot', 'banana']

print 'Item 0 is ', shoplist[0]

print 'Item 1 is ', shoplist[1]

print 'Item 2 is ', shoplist[2]

print 'Item 3 is ', shoplist[3]

print 'Item -1 is ', shoplist[-1]

print 'Item -2 is ', shoplist[-2]

# Slicing on a list

print 'Item 1 to 3 is ', shoplist[1:3]

print 'Item 2 to end is ', shoplist[2:]

print 'Item 1 to -1 is ', shoplist[1:-1]

print 'Item start to end is ', shoplist[:]

輸出:

Item 0 is apple

Item 1 is mango

Item 2 is carrot

Item 3 is banana

Item -1 is banana

Item -2 is carrot

Item 1 to 3 is ['mango', 'carrot']

Item 2 to end is ['carrot', 'banana']

Item 1 to -1 is ['mango', 'carrot']

Item start to end is ['apple', 'mango', 'carrot', 'banana']


name = 'swaroop'

print 'characters 1 to 3 is', name[1:3]

print 'characters 2 to end is', name[2:]

print 'characters 1 to -1 is', name[1:-1]

print 'characters start to end is', name[:]

輸出:

characters 1 to 3 is wa

characters 2 to end is aroop

characters 1 to -1 is waroo

characters start to end is swaroop

--------------------------------------------------------

參考

當(dāng)你創(chuàng)建一個對象并給它賦一個變量的時候,這個變量僅僅參考那個對象,而不是表示這個對象本身已卸!也就是說佛玄,變量名指向你計算機中存儲那個對象的內(nèi)存。這被稱作名稱到對象的綁定咬最。

print 'Simple Assignment'

shoplist = ['apple', 'mango', 'carrot', 'banana']

mylist = shoplist # mylist is just another name pointing to the same object!

del shoplist[0]

print 'shoplist is', shoplist

print 'mylist is', mylist

# notice that both shoplist and mylist both print the same list without

# the 'apple' confirming that they point to the same object

print 'Copy by making a full slice'

mylist = shoplist[:] # make a copy by doing a full slice

del mylist[0]

print 'shoplist is', shoplist

print 'mylist is', Myles


輸出:

Simple Assignment

shoplist is ['mango', 'carrot', 'banana']

mylist is ['mango', 'carrot', 'banana']

Copy by making a full slice

shoplist is ['mango', 'carrot', 'banana']

mylist is ['carrot', 'banana']

注意:如果你想要復(fù)制一個列表或者類似的序列或者其他復(fù)雜的對象(不是如整數(shù)那樣的簡單對象)翎嫡,那么你必須使用切片操作符來取得拷貝欠动。如果你只是想要使用另一個變量名永乌,兩個名稱都參考同一個對象,那么如果你不小心的話具伍,可能會引來各種麻煩翅雏。

--------------------------------------------------------

更多字符串方法

name = 'Swaroop' # This is a string object

if name.startswith('Swa'):

? ? ? print 'Yes, the string starts with "Swa"'

if 'a' in name:

? ? ? print 'Yes, it contains the string "a"'

if name.find('war') !=-1: #返回-1表示找不到子字符串

? ? ? print 'Yes, it contains the string "war"'

delimiter = '_*_'

mylist = ['Brazil', 'Russia', 'India', 'China']

print delimiter.join(mylist)

輸出:

Yes, the string starts with "Swa"

Yes, it contains the string "a"

Yes, it contains the string "war"

Brazil_*_Russia_*_India_*_China

--------------------------------------------------------

類 class

class Person:

? ? ? population = 0

? ? ? def __init__(self, name):

? ? ? ? ? ? ?self.name?= name

? ? ? ? ? ? print '(Initializing %s)' % self.name

? ? ? ? ? ? Person.population += 1

? ? ? def __del__(self):

? ? ? ? ? ? '''I am dying.'''

? ? ? ? ? ? print' %s says bye.' % self.name

? ? ? ? ? ? Person.population -= 1

? ? ? ? ? ? if Person.population == 0:

? ? ? ? ? ? ? ? ? print 'I am the last one.'

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? ? print 'There are still %d people left.' % Person.population

? ? ? def sayHi(self):

? ? ? ? ? ? '''Greeting by the person.

? ? ? ? ? ? ?Really, that's all it does.'''

? ? ? ? ? ? print 'Hi, my name is %s.' % self.name


--------------------------------------------------------

繼承

class SchoolMember:

? ? ? def __init__(self, name):

? ? ? ? ? ??self.name?= name

? ? ? def tell(self):

? ? ? ? ? ? print 'Name: ' +?self.name

class Teacher(SchoolMember):

? ? ? ?def __init__(self, name, salary):

? ? ? ? ? ? SchoolMember.__init__(self, name)

? ? ? ? ? ? self.salary = salary

? ? ? def tell(self):

? ? ? ? ? ? print 'Salary : %d ' % self.salary

class Student(SchoolMember):

? ? ? def __init__(self, name, marks):

? ? ? ? ? ? SchoolMember.__init__(self, name)

? ? ? ? ? ? self.marks = marks

? ? ? def tell(self):

? ? ? ? ? ? print 'Marks : %d' % self.marks

t = Teacher('Chengjie', 10000)

s = Student('Makai', 99)

members = [t, s]

for member in members:

? ? ? member.tell()

輸出:

Salary : 10000

Marks : 99

--------------------------------------------------------

操作文件 file

poem = '''\

Programming is fun

When the work is done

if you wanna make your work also fun:

use Python!

'''

f = file('poem.txt', 'w')

f.write(poem)

f.close()

f = file('poem.txt')

# if no mode is specified, 'r'ead mode is assumed by default

while True:

? ? ? line = f.readline()

? ? ? if len(line) ==0:# Zero length indicates EOF

? ? ? ? ? ? break

? ? ? print line,

f.close()# close the file


輸出:

Programming is fun

When the work is done

if you wanna make your work also fun:

use Python!

r:讀模式

w:寫模式

a:追加模式

--------------------------------------------------------

儲存器

Python提供一個標準的模塊,稱為pickle人芽。使用它你可以在一個文件中儲存任何Python對象望几,之后你又可以把它完整無缺地取出來。這被稱為持久地儲存對象萤厅。

還有另一個模塊稱為cPickle橄抹,它的功能和pickle模塊完全相同,只不過它是用C語言編寫的惕味,因此要快得多(比pickle快1000倍)楼誓。你可以使用它們中的任一個,而我們在這里將使用cPickle模塊名挥。記住疟羹,我們把這兩個模塊都簡稱為pickle模塊。

import cPickle as p

shoplistfile = 'shoplist.data'

shoplist = ['apple', 'mango', 'carrot']

# Write to the file

f = file(shoplistfile, 'w')

p.dump(shoplist, f)# dump the object to a file

f.close()

del shoplist

# Read back from the storage

f = file(shoplistfile)

storedlist = p.load(f)

print storedlist

輸出:

['apple', 'mango', 'carrot']

--------------------------------------------------------

異常

基本格式:

try:

? ? ? fadfdsafdaf

except EOFError:

? ? ? fdaferewasfsdfas

except:

? ? ? fdafdafwerwe

import sys

try:

? ? ? s = raw_input('Enter something --> ')

except EOFError:

? ? ? print '\nWhy did you do an EOF on me?'

? ? ? sys.exit()

except:

? ? ? print '\nSome error/exception occurred.'

? ? ? # here, we are not exiting the program

print 'Done'

輸出:

Enter something—>(#此處輸入ctrl + d)

Why did you do an EOF on me?

$ pythontry_except.py

Enter something --> Python is exceptional!

Done

--------------------------------------------------------

使用 raise 引發(fā)異常

自定義并異常:

class ShortInputException(Exception):

? ? ? '''A user-defined exception class.'''

? ? ? def __init__(self, length, atleast):

? ? ? ? ? ? Exception.__init__(self)

? ? ? ? ? ? self.length = length

? ? ? ? ? ? self.atleast = atleast

try:

? ? ? s =raw_input('Enter something --> ')

? ? ? if len(s) < 3:

? ? ? ? ? ? raise ShortInputException(len(s), 3)

# Other work can continue as usual here

except EOFError:

? ? ? print '\nWhy did you do an EOF on me?'

except ShortInputException, x:

? ? ? print 'ShortInputException: The input was of length %d, \

? ? ? was expecting at least %d'% (x.length, x.atleast)

else:

? ? ? print 'No exception was raised.'

--------------------------------------------------------

try…finally

finally 后為必定執(zhí)行語句

--------------------------------------------------------

os模塊

這個模塊包含普遍的操作系統(tǒng)功能禀倔。如果你希望你的程序能夠與平臺無關(guān)的話榄融,這個模塊是尤為重要的。即它允許一個程序在編寫后不需要任何改動救湖,也不會發(fā)生任何問題愧杯,就可以在Linux和Windows下運行。一個例子就是使用os.sep可以取代操作系統(tǒng)特定的路徑分割符鞋既。

下面列出了一些在os模塊中比較有用的部分力九。它們中的大多數(shù)都簡單明了。

os.name字符串指示你正在使用的平臺涛救。比如對于Windows畏邢,它是'nt',而對于Linux/Unix用戶检吆,它是'posix'舒萎。

os.getcwd()函數(shù)得到當(dāng)前工作目錄,即當(dāng)前Python腳本工作的目錄路徑。

os.getenv()和os.putenv()函數(shù)分別用來讀取和設(shè)置環(huán)境變量臂寝。

os.listdir()返回指定目錄下的所有文件和目錄名章鲤。

os.remove()函數(shù)用來刪除一個文件。

os.system()函數(shù)用來運行shell命令咆贬。

os.linesep字符串給出當(dāng)前平臺使用的行終止符败徊。例如,Windows使用'\r\n'掏缎,Linux使用'\n'而Mac使用'\r'皱蹦。

os.path.split()函數(shù)返回一個路徑的目錄名和文件名。

>>> os.path.split('/home/swaroop/byte/code/poem.txt')

('/home/swaroop/byte/code', 'poem.txt')

os.path.isfile()和os.path.isdir()函數(shù)分別檢驗給出的路徑是一個文件還是目錄眷蜈。類似地沪哺,os.path.existe()函數(shù)用來檢驗給出的路徑是否真地存在。

--------------------------------------------------------

特殊的方法

在類中有一些特殊的方法具有特殊的意義酌儒,比如__init__和__del__方法辜妓,它們的重要性我們已經(jīng)學(xué)習(xí)過了。

一般說來忌怎,特殊的方法都被用來模仿某個行為籍滴。例如,如果你想要為你的類使用x[key]這樣的索引操作(就像列表和元組一樣)榴啸,那么你只需要實現(xiàn)__getitem__()方法就可以了孽惰。想一下,Python就是對list類這樣做的插掂!

下面這個表中列出了一些有用的特殊方法灰瞻。如果你想要知道所有的特殊方法,你可以在《Python參考手冊》中找到一個龐大的列表辅甥。

表15.1 一些特殊的方法

名稱說明

__init__(self,...) ?這個方法在新建對象恰好要被返回使用之前被調(diào)用酝润。

__del__(self) ?恰好在對象要被刪除之前調(diào)用。

__str__(self) ?在我們對對象使用print語句或是使用str()的時候調(diào)用璃弄。

__lt__(self,other) ?當(dāng)使用小于運算符(<)的時候調(diào)用要销。類似地,對于所有的運算符(+夏块,>等等)都有特殊的方法疏咐。

__getitem__(self,key) ?使用x[key]索引操作符的時候調(diào)用。

__len__(self) ?對序列對象使用內(nèi)建的len()函數(shù)的時候調(diào)用脐供。

--------------------------------------------------------

列表綜合

通過列表綜合浑塞,可以從一個已有的列表導(dǎo)出一個新的列表。例如政己,你有一個數(shù)的列表酌壕,而你想要得到一個對應(yīng)的列表,使其中所有大于2的數(shù)都是原來的2倍。對于這種應(yīng)用卵牍,列表綜合是最理想的方法果港。

使用列表綜合

例15.1 使用列表綜合

#!/usr/bin/python

# Filename:list_comprehension.py

listone = [2,3,4]

listtwo = [2*i for i in listone if i >2]

print listtwo

輸出

$ pythonlist_comprehension.py

[6, 8]

--------------------------------------------------------

在函數(shù)中接收元組和列表

當(dāng)要使函數(shù)接收元組或字典形式的參數(shù)的時候,有一種特殊的方法糊昙,它分別使用*和**前綴辛掠。這種方法在函數(shù)需要獲取可變數(shù)量的參數(shù)的時候特別有用。

>>> def powersum(power, *args):

... ? ? ? ? ? '''Return the sum of each argument raised to specified power.'''

... ? ? ? ? ? total = 0

... ? ? ? ? ? for i in args:

... ? ? ? ? ? ? ? ?total += pow(i, power)

... ? ? ? ? ? return total

...

>>> powersum(2, 3, 4)

25

>>> powersum(2, 10)

100

由于在args變量前有*前綴释牺,所有多余的函數(shù)參數(shù)都會作為一個元組存儲在args中萝衩。如果使用的是**前綴,多余的參數(shù)則會被認為是一個字典的鍵/值對船侧。

--------------------------------------------------------

lambda形式

lambda語句被用來創(chuàng)建新的函數(shù)對象欠气,并且在運行時返回它們。

例15.2 使用lambda形式

#!/usr/bin/python

# Filename:lambda.py

def make_repeater(n):

? ? ? return lambdas: s*n #可為多參數(shù)镜撩,如:?return lambda s1,?s2: ?s1 + s2 +?n

twice = make_repeater(2)

printtwice('word')

printtwice(5)

輸出

$ pythonlambda.py

wordword

10

它如何工作

這里,我們使用了make_repeater函數(shù)在運行時創(chuàng)建新的函數(shù)對象队塘,并且返回它袁梗。lambda語句用來創(chuàng)建函數(shù)對象。本質(zhì)上憔古,lambda需要一個參數(shù)遮怜,后面僅跟單個表達式作為函數(shù)體,而表達式的值被這個新建的函數(shù)返回鸿市。注意锯梁,即便是print語句也不能用在lambda形式中,只能使用表達式焰情。

--------------------------------------------------------

exec和eval語句

exec語句用來執(zhí)行儲存在字符串或文件中的Python語句陌凳。例如,我們可以在運行時生成一個包含Python代碼的字符串内舟,然后使用exec語句執(zhí)行這些語句合敦。下面是一個簡單的例子。

>>> exec 'print "Hello World"'

Hello World

eval語句用來計算存儲在字符串中的有效Python表達式验游。下面是一個簡單的例子充岛。

>>> eval('2*3')

6

--------------------------------------------------------

assert語句

assert語句用來聲明某個條件是真的。例如耕蝉,如果你非常確信某個你使用的列表中至少有一個元素崔梗,而你想要檢驗這一點,并且在它非真的時候引發(fā)一個錯誤垒在,那么assert語句是應(yīng)用在這種情形下的理想語句蒜魄。當(dāng)assert語句失敗的時候,會引發(fā)一個AssertionError。

>>> mylist = ['item']

>>> assert len(mylist) >= 1

>>> mylist.pop()

'item'

>>> assert len(mylist) >= 1

Traceback (most recent call last):

? ? ? File "", line 1, in ?

AssertionError

--------------------------------------------------------

repr函數(shù)

repr函數(shù)用來取得對象的規(guī)范字符串表示权悟。反引號(也稱轉(zhuǎn)換符)可以完成相同的功能砸王。注意,在大多數(shù)時候有eval(repr(object)) == object峦阁。

>>> i = []

>>> i.append('item')

>>> `i`

"['item']"

>>> repr(i)

"['item']"

基本上谦铃,repr函數(shù)和反引號用來獲取對象的可打印的表示形式。你可以通過定義類的__repr__方法來控制你的對象在被repr函數(shù)調(diào)用的時候返回的內(nèi)容榔昔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驹闰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子撒会,更是在濱河造成了極大的恐慌嘹朗,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诵肛,死亡現(xiàn)場離奇詭異屹培,居然都是意外死亡,警方通過查閱死者的電腦和手機怔檩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門褪秀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人薛训,你說我怎么就攤上這事媒吗。” “怎么了乙埃?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵闸英,是天一觀的道長。 經(jīng)常有香客問我介袜,道長甫何,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任米酬,我火速辦了婚禮沛豌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赃额。我一直安慰自己加派,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布跳芳。 她就那樣靜靜地躺著芍锦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪飞盆。 梳的紋絲不亂的頭發(fā)上娄琉,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天次乓,我揣著相機與錄音,去河邊找鬼孽水。 笑死票腰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的女气。 我是一名探鬼主播射富,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼吼驶,長吁一口氣:“原來是場噩夢啊……” “哼昂验!你這毒婦竟也來了券躁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤谒主,失蹤者是張志新(化名)和其女友劉穎朝扼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霎肯,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡擎颖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了姿现。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肠仪。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖备典,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情意述,我是刑警寧澤提佣,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站荤崇,受9級特大地震影響拌屏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜术荤,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一倚喂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓣戚,春花似錦端圈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仑嗅,卻和暖如春宴倍,著一層夾襖步出監(jiān)牢的瞬間张症,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工鸵贬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留俗他,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓阔逼,卻偏偏與公主長得像兆衅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子颜价,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Python 基礎(chǔ)教程 實例(Python 2.0+) 實例(Python 3.0+) Python 簡介 Pyt...
    縱我不往矣閱讀 64,722評論 0 23
  • 本節(jié)內(nèi)容 Python介紹 發(fā)展史 Python 2 or 3? 安裝 Hello World程序 變量 用戶輸入...
    小小不懂11閱讀 3,406評論 2 30
  • 1.數(shù)據(jù)類型 整數(shù)(int):1涯保,-100浮點數(shù)(float):1.23字符串(str):'abc',"xyz"布...
    辛立閱讀 650評論 0 1
  • 今日看到公眾號【女神進化論】的最新文章:如何避免補償性消費而培養(yǎng)正確消費觀周伦?文章里提到產(chǎn)生補償型消費的原因主要如下...
    Sing_2017閱讀 249評論 0 0
  • 今晚可能是我最后一個交作業(yè)了夕春,有這個組織真好,互相鼓勵和監(jiān)督专挪,想偷懶都不好意思及志! 今天的時間很緊湊,直到現(xiàn)在才洗涮...
    宋寧靜閱讀 81評論 2 0