标签:
本教程综合Stanford CS231N和UC Berkerley CS188的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–的操作
用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 concatenation
?print hw # prints "hello world"
?hw12 = ‘%s %s %d‘ % (hello, world, 12) # sprintf style string format
in
?print 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退出查看。
>>> 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]"
类似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集合没有顺序
>>> 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‘])
类似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
就是新建一个文件,然后把后缀改成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)
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 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
在前面在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]
标签:
原文地址:http://blog.csdn.net/songrotek/article/details/46461921