Python 学习之二:Python超短教程
2015-06-11 21:05
666 查看
前言
本教程综合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 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退出查看。
数据结构
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]
相关文章推荐
- Python之正则表达式进阶篇
- 使用python进行图像处理的基本方法
- Python 得到Twitter所有用户friends和followers
- Ubuntu下如何搭建完美Python开发环境?
- python fabric远程操作和部署
- python机器学习工具包
- Python入门教程
- [Python] 中文
- Windows 7 64bit编译rpy2 Python扩展
- Windows上配置python的环境变量
- ubuntu 下从一个python文件中调用另外的一个python文件中的类!
- Java调用Python
- 一个python的验证码生成类
- python openpyxl读写excel
- python 时间字符串格式转换
- python
- python join字符连接函数的使用方法
- Python学习第五周:字符串 - 作业20150611
- Python3.4对比Excel内容
- Python书单,不将就