《A Byte of Python》 notes

Python起源

Python的创始人为吉多·范罗苏姆(Guido van Rossum);
在Google内部的很多项目,例如Google Engine使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模块。在操控硬件的场合使用 C++,在快速开发时候使用 Python。

使用Python编写的著名应用

* Reddit - 社交分享网站
* Dropbox - 文件分享服务
* 豆瓣网 - 图书、唱片、电影等文化产品的资料数据库网站
* Django - 鼓励快速开发的Web应用框架

Python的设计哲学

“优雅”、“明确”、“简单”;
用Python编程是一种 愉快的事;
Python语言是少有的一种可以称得上 即简单又功能强大的编程语言:1.阅读Python代码就像读英语,2.无须考虑内存管理等底层细节,3.解释性语言,无须考虑编译链接库等;4.标准库丰富强大;5.开源,无须修改代码便可移植到几乎任何平台;

程序员的话

● Eric S. Raymond是《The Cathedral and the Bazaar》的作者、“开放源码”一词的提出人。
他说 Python已经成为了他最喜爱的编程语言。这篇文章也是促使我第一次接触Python的
真正原动力。
● Bruce Eckel著名的《Thinking in Java》和《Thinking in C++》的作者。他说 没有一种语言
比得上Python使他的工作效率如此之高
。同时他说Python可能是唯一一种旨在帮助程序
员把事情弄得更加简单的语言。请阅读完整的采访以获得更详细的内容。
● Peter Norvig是著名的Lisp语言书籍的作者和Google公司的搜索质量主任(感谢Guido van
Rossum告诉我这一点)。他说Python始终是Google的主要部分。事实上你看一下 Google
招聘的网页
就可以验证这一点。在那个网页上,Python知识是对软件工程师的一个必需
要求。

Python简介

Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符,因此Python也支持泛型设计。

Python 语言利用缩进表示语句块的开始和退出(Off-side规则)。根据 PEP 的规定,必须使用4个空格来表示每级缩进;
避免在程序中使用分号;

python -V 查看版本
在命令行的shell提示符下键入python,启动解释器,按Ctrl-d退出提示符;

#!/usr/bin/python 其中#!这两个字符告诉linux系统应该运行哪个解释器;

使用help功能来快速查看函数帮助;
python中的注释使用#

Python中的数据类型

整数       2
长整数   不过是大一些的整数
浮点数    2.12
字符串
bool    True, False
复数     (-5+4j)

内置类:list、tuple、dict

None是Python中表示没有任何东西的特殊类型。例如,如果一个变量的值为None,可以表示它没有值。
在Python中没有专门的char数据类型;


字符串单引号、双引号、三引号

单引号:     'hello world'
双引号:与单引号完全相同,并且可以包含单引号     
"hello i'm world"
换行用法 "hello \
i'm world"
三引号:多行,可以包含双引号
'''hello i'm
"world"
'''
级联字符串
"hello ""world"
unicode字符串 
u"hello world"
自然字符串,可用于正则表达式,不希望转义处理
r"hello world"

运算符的特殊用法

3+5为8
'a'+'b'为'ab'
2*3为6
'la'*3为'lalala'
x**y 幂,x的y次方
与或非 and or not

控制流的特殊用法

if语句后面的冒号表示后面跟着语句块
if True:
    print 'Yes, it is true'

python中没有switch语句;
while True:
    print 'Yes, it is true.'
else:
    print 'loop is done.'

for i in [1, 2, 3, 4]:
    print i
else:
    print 'The for loop is over'
for..in..后面必须是序列(list、tuple、str)
range(1,5)等价于[1, 2, 3, 4];
break语句退出循环,else分支也不会执行了;
一个重要的注释是,如果你从for或while循环中 终止 ,任何对应的循环else块将不执行。

函数

def sayHello():
    print 'Hello World!'
sayHello() 

函数内部定义的变量作用域只限函数,想使用外部的变量,用global;
def someFunction():
    pass

pass语句在Python中表示一个空的语句块。
除非你提供你自己的return语句,每个函数都在结尾暗含有return None语句。

强烈建议为每个函数编写文档字符串;
文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。
使用__doc__或者help()可以显示文档字符串。

模块

如果你想要直接使用所有sys模块使用的名字(避免每次打sys.argv),那么你可以使用from sys import *语句;
一般说来,应该避免使用from..import而使用,为了避免名称的冲突;
每个Python模块都有它的__name__,如果它是'__main__',这说明这个模块被用户单独运行,而不是import;
import..as语法:这是一种便利方法,以便于我们可以使用更短的模块名称‘
关于del的一点注释——这个语句在运行后被用来 删除 一个变量/名称。在这个例子中,del a,你将无法再使用变量a——它就好像从来没有存在过一样。

内建数据结构

列表:可变。一个序列,每个元素的类型可以不一样。help(list)
shoplist = ['apple', 'banana', 'mango'];
for item in shoplist:
    print item
shoplist[0]
shoplist.append('carrot')
shoplist.sort()
del shoplist[0]

元组:不可变。也是一个序列。help(tuple)
zoo = ('wolf', 'elephant', 'penguin')
zoo[0]
singleton = (2 , )
元组有只有一个元素时,必须后跟一个逗号,区别于圆括号表达式。

字典:无序的键值对。不是序列。help(dict)
ab = { 'Swaroop' : 'swaroopch@byteofpython.info', 'Larry' : 'larry@wall.org'}
print ab['Saroop']
del ab['Spammer']
for name, address in ab.items():
      print 'Contact %s at %s' % (name, address)
if 'Guido' in ab: # OR ab.has_key('Guido')
      print "\nGuido's address is %s" % ab['Guido']

列表、元组和字符串都是序列。
序列的两个主要特点是索引操作符和切片操作符。
shoplist[1:3]:1、2
shoplist[:]:全部
shoplist[-1]表示序列的最后一个元素;
shoplist[-2]抓取序列的倒数第二个项目。

引用

当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 引用 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。这被称作名称到对象的绑定。
shoplist = ['apple', 'mango', 'carrot', 'banana']
mylist = shoplist
del shoplist[0]

如果你想要复制一个列表或者类似的序列或者其他复杂的对象(不是如整数那样的简单 对象 ),那么你必须使用切片操作符来取得拷贝。

传递参数的时候,python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符串或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。

正确的过程是先编写出简单可用的第一个版本,然后一次次重复这个编写-测试-使用的周期。
记住“软件是长出来的,而不是一次建成的”。

类包括域和方法;
记住“域和方法可以合称为类的属性“

类的方法必须有一个额外的第一个参数名称self,但是在调用这个方法的时候你不为这个参数赋值;
class Person:
      def __init__(self, name):
            self.name = name
      def sayHi(self):
            print 'Hello, my name is', self.name
p = Person('Swaroop')
p.sayHi()

Python中所有的类成员(包括数据成员)都是 公共的 ,所有的方法都是 有效的 。
只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。
有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀,例如_privateData。而其他的名称都将作为公共的,可以被其他类/对象使用。

python中,没有任何形式的函数重载;
Python不会自动调用基本类的constructor,你得亲自专门调用它。

文件

在print语句上使用逗号来消除自动换行:
for item in [1,2,3]:
     print item,

cPickle用于持久储存对象;
import cPickle as p
shoplist = ['apple', 'mango', 'carrot']p.dump(shoplist, f)storedlist = p.load(f)

f = file('poem.txt')
while True: 
      line = f.readline()
      if len(line) == 0:
            break
len(line)表示读到EOF

退出程序

sys.exit() # exit the program

列表综合

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

可变参数
def test(*args):
    for i in args:
        print i

lambda

lambda语句被用来创建新的函数对象,并且在运行时返回它们。

twice = lambda s: s*2
print twice('word')


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值