Python 學習之二:Python超短教程

前言

本教程綜合Stanford CS231N和UC Berkerley CS188的Python教程。
教程很短,但適合有一定編程基礎,學過其他語言的童鞋。

Python

啓動Python 解釋器

Python可以有兩種使用方式,一種就是使用解釋器interpreter,類似Matlab,輸入一行代碼,運行一行;另一種就是編寫一個py後綴的文檔,稱爲腳本,然後python xxx.py運行腳本script。這裏我們使用解釋器。
在已安裝Python的情況下,在Terminal輸入python,可以啓動Python:

FloodSurges-MacBook-Pro:~ FloodSurge$ python
Python 2.7.9 (v2.7.9:648dcafa7e5f, Dec 10 2014, 10:10:46) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

這裏我是使用2.7.9版本的Python

操作符

在Python解釋器中,使用>>>來表示一行代碼,類似Matlab(使用<<)
先是最基本的操作符+,-,*,/:

>>> 1 + 1
2
>>> 2 * 3
6
>>> 2 / 3
0
>>> 2 / 3.1
0.6451612903225806

接下來還有常用的次方運算,採用**

>>> 2 ** 2
4
>>> 2 ** 3
8

數據類型

Python和其他語言很大的不同就是Python不需要定義數據類型,數據類型是根據數據的情況自行確定的。
比如上面的運算,輸入3就是整型,輸入3.1就是浮點數

數字

x=3

print type(x) # Prints "<type 'int'>"
print x # Prints "3"
print x + 1 # Addition; prints "4"
print x - 1 # Subtraction; prints "2"
print x * 2 # Multiplication; prints "6"
print x ** 2 # Exponentiation; prints "9"
x += 1
print x # Prints "4"

注意Python不支持x++或者x–的操作

布爾量Boolean

用True和False表示

f = False
print type(t) # Prints "<type 'bool'>"
print t and f # Logical AND; prints "False"
print t or f # Logical OR; prints "True"
print not t # Logical NOT; prints "False"

這裏要注意Python中不使用&&, ||,!來表示與,或,非
而是直接使用英語and,or,not

>>> 1==0
False
>>> not (1==0)
True
>>> (2==2) and (2==3)
False
>>> (2==2) or (2==3)
True

字符串

hello = 'hello' # String literals can use single quotes
world = "world" # or double quotes; it does not matter.print hello # Prints "hello"
print len(hello) # String length; prints "5"
hw = hello + ' ' + world # String concatenationprint hw # prints "hello world"
hw12 = '%s %s %d' % (hello, world, 12) # sprintf style string format
inprint hw12 # prints "hello world 12

有很多現成的方法對字符串進行操作:


print s.capitalize() # Capitalize a string; prints "Hello"
print s.upper() # Convert a string to uppercase; prints "HELLO"
print s.rjust(7) # Right-justify a string, padding with spaces;
print s.center(7) # Center a string, padding with spaces; prints
print s.replace('l', '(ell)') # Replace all instances of one substri
# prints "he(ell)(ell)o"
>>> 'artificial' + "intelligence"
'artificialintelligence'

事實上,不管是用單引號還是雙引號都是一樣的。

>>> a = 'hello'
>>> a
'hello'
>>> b = "hello"
>>> b
'hello'
>>> a == b
True

那麼,我們可以通過dir和help來查看某個類型對應的methods.

>>> a = 'hello'
>>> dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
>>> help(a.find)
Help on built-in function find:

find(...)
    S.find(sub [,start [,end]]) -> int

    Return the lowest index in S where substring sub is found,
    such that sub is contained within S[start:end].  Optional
    arguments start and end are interpreted as in slice notation.

    Return -1 on failure.

上面的help之後按Q退出查看。

數據結構

List列表

>>> fruits = ['apple','orange','pear','banana']
>>> fruits[0]
'apple'

可以通過 + 來連接列表

>>> otherFruits = ['kiwi','strawberry']
>>> fruits + otherFruits
>>> ['apple', 'orange', 'pear', 'banana', 'kiwi', 'strawberry']

Python支持負值索引,比如fruits[-1]就是列表的最後一個。

>>> fruits[-2]
'pear'
>>> fruits.pop()
'banana'
>>> fruits
['apple', 'orange', 'pear']
>>> fruits.append('grapefruit')
>>> fruits
['apple', 'orange', 'pear', 'grapefruit']
>>> fruits[-1] = 'pineapple'
>>> fruits
['apple', 'orange', 'pear', 'pineapple']

接下來可以用:來檢索多個數據:

>>> fruits[0:2]
['apple', 'orange']
>>> fruits[:3]
['apple', 'orange', 'pear']
>>> fruits[2:]
['pear', 'pineapple']
>>> len(fruits)
4

然後lists也可以嵌套:

>>> lstOfLsts = [['a','b','c'],[1,2,3],['one','two','three']]
>>> lstOfLsts[1][2]
3
>>> lstOfLsts[0].pop()
'c'
>>> lstOfLsts
[['a', 'b'],[1, 2, 3],['one', 'two', 'three']]

循環Loops:

animals = ['cat', 'dog', 'monkey']
for animal in animals:
   print animal
# Prints "cat", "dog", "monkey", each on its own line.

如果要獲取每個元素的索引值,使用枚舉Enumerate:

animals = ['cat', 'dog', 'monkey']
for idx, animal in enumerate(animals):
   print '#%d: %s' % (idx + 1, animal)
# Prints "#1: cat", "#2: dog", "#3: monkey", each on its own line

List Comprehension 從一個數據轉換到另一個數據:

>>> nums = [0,1,2,3,4]
>>> squares = []
>>> for x in nums:
...     squares.append(x ** 2)
... 
>>> print squares
[0, 1, 4, 9, 16]

也可以這麼寫:

>>> nums = [0,1,2,3,4]
>>> squares = [x**2 for x in nums]
>>> print squares
[0, 1, 4, 9, 16]

還可以包含條件:

nums = [0, 1, 2, 3, 4]
even_squares = [x ** 2 for x in nums if x % 2 == 0] 
print even_squares # Prints "[0, 4, 16]"

Tuple

類似List,但初始化之後就不可更改

>>> pair = (3,5)
>>> pair[0]
3
>>> x,y = pair
>>> x
3
>>> y
5
>>> pair[1] = 6
TypeError: object does not support item assignment

Set集合

Set集合沒有順序

>>> shapes = ['circle','square','triangle','circle']
>>> setOfShapes = set(shapes)
>>> setOfShapes
set(['circle','square','triangle'])
>>> setOfShapes.add('polygon')
>>> setOfShapes
set(['circle','square','triangle','polygon'])
>>> 'circle' in setOfShapes
True
>>> 'rhombus' in setOfShapes
False
>>> favoriteShapes = ['circle','triangle','hexagon']
>>> setOfFavoriteShapes = set(favoriteShapes)
>>> setOfShapes - setOfFavoriteShapes
set(['square','polyon'])
>>> setOfShapes & setOfFavoriteShapes
set(['circle','triangle'])
>>> setOfShapes | setOfFavoriteShapes
set(['circle','square','triangle','polygon','hexagon'])

Dictionary字典

類似java的Map,一個Key對應一個Value。

>>> studentIds = {'knuth': 42.0, 'turing': 56.0, 'nash': 92.0 }
>>> studentIds['turing']
56.0
>>> studentIds['nash'] = 'ninety-two'
>>> studentIds
{'knuth': 42.0, 'turing': 56.0, 'nash': 'ninety-two'}
>>> del studentIds['knuth']
>>> studentIds
{'turing': 56.0, 'nash': 'ninety-two'}
>>> studentIds['knuth'] = [42.0,'forty-two']
>>> studentIds
{'knuth': [42.0, 'forty-two'], 'turing': 56.0, 'nash': 'ninety-two'}
>>> studentIds.keys()
['knuth', 'turing', 'nash']
>>> studentIds.values()
[[42.0, 'forty-two'], 56.0, 'ninety-two']
>>> studentIds.items()
[('knuth',[42.0, 'forty-two']), ('turing',56.0), ('nash','ninety-two')]
>>> len(studentIds)
3

寫腳本Script

就是新建一個文件,然後把後綴改成py。然後在裏面輸入代碼,比如foreach.py:

# This is what a comment looks like
fruits = ['apples','oranges','pears','bananas']
for fruit in fruits:
    print fruit + ' for sale'
fruitPrices = {'apples': 2.00, 'oranges': 1.50, 'pears': 1.75}
for fruit, price in fruitPrices.items():
    if price < 2.00:
        print '%s cost %f a pound' % (fruit, price)
    else:
        print fruit + ' are too expensive!'

然後在terminal在相應路徑下(記住不是在Python 解釋器下運行)

python foreach.py
apples for sale
oranges for sale
pears for sale
bananas for sale
oranges cost 1.500000 a pound
pears cost 1.750000 a pound
apples are too expensive!

這裏還有兩個很有用的map和filter方法:

>>> map(lambda x: x * x, [1,2,3])
[1, 4, 9]
>>> filter(lambda x: x > 3, [1,2,3,4,5,4,3,2,1])
[4, 5, 4]

注意空格

Python對語法要求很高,比如for語句下一個語句要空格否則可能報錯

>>> for x in nums:
... squares.append(x ** 2)
  File "<stdin>", line 2
    squares.append(x ** 2)
          ^
IndentationError: expected an indented block
>>> for x in nums:
...     squares.append(x ** 2)

Function函數

fruitPrices = {'apples':2.00, 'oranges': 1.50, 'pears': 1.75}
def buyFruit(fruit, numPounds):
    if fruit not in fruitPrices:
        print "Sorry we don't have %s" % (fruit)
    else:
        cost = fruitPrices[fruit] * numPounds
        print "That'll be %f please" % (cost)
# Main Function
if __name__ == '__main__':
    buyFruit('apples',2.4)
    buyFruit('coconuts',2)

Class 類

class FruitShop:
    def __init__(self, name, fruitPrices):
        """
            name: Name of the fruit shop
            fruitPrices: Dictionary with keys as fruit
            strings and prices for values e.g.
            {'apples':2.00, 'oranges': 1.50, 'pears': 1.75}
        """
        self.fruitPrices = fruitPrices
        self.name = name
        print 'Welcome to the %s fruit shop' % (name)
    def getCostPerPound(self, fruit):
        """
            fruit: Fruit string
        Returns cost of 'fruit', assuming 'fruit'
        is in our inventory or None otherwise
        """
        if fruit not in self.fruitPrices:
            print "Sorry we don't have %s" % (fruit)
            return None
        return self.fruitPrices[fruit]
    def getPriceOfOrder(self, orderList):
        """
orderList: List of (fruit, numPounds) tuples
Returns cost of orderList. If any of the fruit are
        """
        totalCost = 0.0
        for fruit, numPounds in orderList:
            costPerPound = self.getCostPerPound(fruit)
            if costPerPound != None:
                totalCost += numPounds * costPerPound
        return totalCost
    def getName(self):
        return self.name

使用對象Object

在前面在shop.py定義了FruitShop類,接下來我們可以在另外的腳本中使用這個類:
採用import

mport shop
shopName = 'the Berkeley Bowl'
fruitPrices = {'apples': 1.00, 'oranges': 1.50, 'pears': 1.75}
berkeleyShop = shop.FruitShop(shopName, fruitPrices)
applePrice = berkeleyShop.getCostPerPound('apples')
print applePrice
print('Apples cost $%.2f at %s.' % (applePrice, shopName))
otherName = 'the Stanford Mall'
otherFruitPrices = {'kiwis':6.00, 'apples': 4.50, 'peaches': 8.75}
otherFruitShop = shop.FruitShop(otherName, otherFruitPrices)
otherPrice = otherFruitShop.getCostPerPound('apples')
print otherPrice
print('Apples cost $%.2f at %s.' % (otherPrice, otherName))
print("My, that's expensive!")

靜態和實例變量

在person_class.py中輸入:

class Person:
    population = 0
    def __init__(self, myAge):
        self.age = myAge
        Person.population += 1
    def get_population(self):
        return Person.population
    def get_age(self):
        return self.age

這裏的population是一個靜態變量,或者說是全局變量
運行如下:

>>> import person_class
>>> p1 = person_class.Person(12)
>>> p1.get_population()
1
>>> p2 = person_class.Person(63)
>>> p1.get_population()
2
>>> p2.get_population()
2
>>> p1.get_age()
12
>>> p2.get_age()
63

其他

使用range來循環:

  for index in range(3):

        print lst[index]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章