第一天学习python。下了很多电子书,但一本也没有去看。采取了中军突破战术。下了programming python的源代码,边读,边运行调试,边思考。感觉挺棒。
python笔记1
1.raw_input()
这个函数可以让py文件的执行暂停。让程序员可以看到程序运行结果。
2.os.getcwd()
该函数不需要传递参数,它返回当前的目录。需要说明的是,当前目录并不是指脚本所在的目录,而是所运行脚本的目录。例如,在PythonWin中输入如下脚本。
1. >>> import os
2. >>> print 'current directory is ',os.getcwd()
3. current directory is D:/Python25/Lib/site-packages/pythonwin
这里是PythonWin的安装目录如果将上述内容写入pwd.py,假设pwd.py位于E:/book/code目录,运行Windows的命令行窗口,进入E:/book目录,输入code/pwd.py,输出如下所示。
1. E:/book>code/pwd.py
2. current directory is E:/book
3.python的控制流
A.for循环
for x in 'spam':
print(x)
B.while循环
x = 4
while x > 0:
print('spam!' * x)
x -= 1
C.if语句
if not 'f' in D:
print('missing')
else:
print('found')
4.sys库
import sys # Load a library module
print(sys.platform)
5.math
import math导入math库
A.求次方
2 ** 8
B.计算一个数值有多少位
len(str(2 ** 1000000))
C.圆周率
math.pi
D.求平方
math.sqrt(85)
E.设置精度
>>> decimal.getcontext().prec = 2
>>> decimal.Decimal('1.00') / decimal.Decimal('3.00')
Decimal('0.33')
notes:
通过decimal.getcontext().prec可以设置数学运算的精度
F.分数
f = Fraction(2, 3)
6.字符串
A. 'zoe' 定义字符串
B. 'zoe'+'tony' 字符串相连
C. 求字符串长度
S = 'Spam'
len(S)
D. 字符串的索引操作方法
S = 'Spam'
S[0],S[-1],S[1:3] ,S[1:],S[:-1]
notes:
最后一个索引的字符会被放弃
字符串的内容不能修改。就是说,字符串是常量。
E. 寻找,替换目标内容
S = 'Spam'
S.find('pa')
返回值是目标内容在字符串中的索引
S.replace('pa', 'XYZ')
replace的返回值是新的字符串,原有字符串不改变。
F. 带分隔符(逗号)的字符串与数组之间的转换
line = 'aaa,bbb,ccccc,dd'
array=line.split(',')
print(array)
['aaa', 'bbb', 'ccccc', 'dd']
G. 判断字符串中的字符是否全部为英文字符
S.isalpha()
'1','we,are'都不算全是字母。
H.去除空格,换行符
line = 'aaa,bbb,ccccc,dd/n'
line = line.rstrip()
H. 字符串的格式化
1.'%s, eggs, and %s' % ('spam', 'SPAM!')
2.'{0}, eggs, and {1}'.format('spam', 'SPAM!')
6A.数值转换成字符串
A.str(2 ** 3)
7A.字符串转换成数字
import decimal # Decimals: fixed precision
d = decimal.Decimal('3.141')
d + 1
7.import语句的使用
#### file: myfile.py
title = "The Meaning of Life"
A.>>> import myfile # Run file; load module as a whole
>>> print(myfile.title) # Use its attribute names: '.' to qualify
The Meaning of Life
B.>>> from myfile import title # Run file; copy its names
>>> print(title) # Use name directly: no need to qualify
The Meaning of Life
8.dir函数
----------------------------------------------转载----------------------------------------------------
可以使用内建的dir
函数来列出模块定义的标识符。标识符有函数、类和变量。
当你为dir()
提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表。
使用dir函数
$ python
>>> import sys
>>> dir(sys) # get list of attributes for sys module
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__',
'__stdin__', '__stdout__', '_getframe', 'api_version', 'argv',
'builtin_module_names', 'byteorder', 'call_tracing', 'callstats',
'copyright', 'displayhook', 'exc_clear', 'exc_info', 'exc_type',
'excepthook', 'exec_prefix', 'executable', 'exit', 'getcheckinterval',
'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding',
'getrecursionlimit', 'getrefcount', 'hexversion', 'maxint', 'maxunicode',
'meta_path','modules', 'path', 'path_hooks', 'path_importer_cache',
'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setdlopenflags',
'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout',
'version', 'version_info', 'warnoptions']
>>> dir() # get list of attributes for current module
['__builtins__', '__doc__', '__name__', 'sys']
>>>
>>> a = 5 # create a new variable 'a'
>>> dir()
['__builtins__', '__doc__', '__name__', 'a', 'sys']
>>>
>>> del a # delete/remove a name
>>>
>>> dir()
['__builtins__', '__doc__', '__name__', 'sys']
>>>
它如何工作
首先,我们来看一下在输入的sys
模块上使用dir
。我们看到它包含一个庞大的属性列表。
接下来,我们不给dir
函数传递参数而使用它——默认地,它返回当前模块的属性列表。注意,输入的模块同样是列表的一部分。
为了观察dir
的作用,我们定义一个新的变量a
并且给它赋一个值,然后检验dir
,我们观察到在列表中增加了以上相同的值。我们使用del
语句删除当前模块中的变量/属性,这个变化再一次反映在dir
的输出中。
关于del
的一点注释——这个语句在运行后被用来 删除 一个变量/名称。在这个例子中,del a
,你将无法再使用变量a
——它就好像从来没有存在过一样。
9.print函数
可以用逗号分隔要打印的内容
a = 'dead' # Define three attributes
b = 'parrot' # Exported to other files
c = 'sketch'
print(a, b, c) # Also used in this file
output : ('dead', 'parrot', 'sketch')
10.exec函数
可以用来执行py文件的内容
exec(open('script1.py').read())
win32
65536
Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam!
11.随机数库random
import random
A.random.random()
B.random.choice([1, 2, 3, 4]) #从1,2,3,4这几个数中随机选一个。
12.数组
A. 定义数组
L = [123, 'spam', 1.23]
L = [1] * 100
B. 取数组的值
L[0],L[:-1]
C. 连接两个数组,生成新的数组
L + [4, 5, 6]
D. 添加新的元素
L.append('NI')
"+" 这个符号可以用来生成新的list,但不改变旧的list
"append" 这个函数可以改变旧的list
F. 删除旧的元素
L.pop(2)
"pop"这个函数的意思不是堆栈的pop,而是删除指定索引的值。
G. 数组排序
>>> M = ['bb', 'aa', 'cc']
>>> M.sort()
H. 按倒序重排数组中的元素
M = ['bb', 'aa', 'cc']
M.reverse()
I. 定义2维数组
>>> M = [[1, 2, 3], # A 3 ?3 matrix, as nested lists
[4, 5, 6], # Code can span lines if bracketed
[7, 8, 9]]
J. 取二维数组,特定列的值
col2 = [row[1] for row in M] # Collect the items in column 2
row[1]是指每行第二个元素
[row[1] + 1 for row in M]
[row[1] for row in M if row[1] % 2 == 0]
-------------------------------------------------------------转载 ---------------------------------------------------------------------------
- list是一个使用方括号括起来的有序元素集合。
- List 可以作为以 0 下标开始的数组。任何一个非空 list 的第一个元素总是 li[0]
- 负数索引从 list 的尾部开始向前计数来存取元素。任何一个非空的 list 最后一个元素总是 li[-1]。 如果负数索引使您感到糊涂, 可以这样理解: li[-n] == li[len(li) - n]。 所以在这个 list 里, li[-3] == li[5 - 3] == li[2]。
- 您可以通过指定 2 个索引得到 list 的子集, 叫做一个 “slice” 。返回值是一个新的 list, 它包含了 list 中按顺序从第一个 slice 索引 (这里为 li[1]) 开始, 直到但是不包括第二个 slice 索引 (这里为 li[3]) 的所有元素。
- 如果将两个分片索引全部省略, 这将包括 list 的所有元素。但是与原始的名为 li 的 list 不同, 它是一个新 list, 恰好拥有与 li 一样的全部元素。li[:] 是生成一个 list 完全拷贝的一个简写。
- append 向 list 的末尾追加单个元素。
- insert 将单个元素插入到 list 中。数值参数是插入点的索引。请注意, list 中的元素不必唯一, 有有两个独立的元素具有 'new' 这个相同的值。
- extend 用来连接 list。请注意不要使用多个参数来调用 extend, 要使用一个 list 参数进行调用。
- Lists 的两个方法 extend 和 append 看起来类似, 但实际上完全不同。 extend 接受一个参数, 这个参数总是一个 list, 并且添加这个 list 中的每个元素到原 list 中
- 另一方面, append 接受一个参数, 这个参数可以是任何数据类型, 并且简单地追加到 list 的尾部。 在这里使用一个含有 3 个元素的 list 参数调用 append 方法。
- index 在 list 中查找一个值的首次出现并返回索引值。
- 要测试一个值是否在 list 内, 使用 in, 如果值存在, 它返回 True, 否则返为 False 。
- remove 从 list 中删除一个值的首次出现。
- pop 是一个有趣的东西。它会做两件事: 删除 list 的最后一个元素, 然后返回删除元素的值。请注意, 这与 li[-1] 不同, 后者返回一个值但不改变 list 本身。也不同于 li.remove(value ), 后者改变 list 但并不返回值。
- Lists 也可以用 + 运算符连接起来。 list = list + otherlist 相当于 list .extend(otherlist )。 但 + 运算符把一个新 (连接后) 的 list 作为值返回, 而 extend 只修改存在的 list。 也就是说, 对于大型 list 来说, extend 的执行速度要快一些。
- Python 支持 += 运算符。 li += ['two'] 等同于 li.extend(['two'])。 += 运算符可用于 list, 字符串和整数, 并且它也可以被重载用于用户自定义的类中。
- * 运算符可以作为一个重复器作用于 list。 li = [1, 2] * 3 等同于 li = [1, 2] + [1, 2] + [1, 2], 即将三个 list 连接成一个。
-------------------------------------------------------------------------------------------------------------------------------------------
13.字典
A. 定义字典
1.{i : sum(M[i]) for i in range(3)} # Creates key/value table of row sums
2.D = {'food': 'Spam', 'quantity': 4, 'color': 'pink'}
3.
D = {}
D['name'] = 'Bob' # Create keys by assignment
D['job'] = 'dev'
D['age'] = 40
B. 获得字典的索引生成数组
D = {'a': 1, 'b': 2, 'c': 3}
Ks = list(D.keys())
C. 动态增长字典
D={'a': 1, 'c': 3, 'b': 2}
D['e'] = 99 # Assigning new keys grows dictionaries 增加新的元素
-----------------------------------------------------------------------------------转载---------------------------------------------------------------------------------------------
- Dictionary 是 Python 的内置数据类型之一, 它定义了键和值之间一对一的关系。
- 每一个元素都是一个 key-value 对, 整个元素集合用大括号括起来
- 您可以通过 key 来引用其值, 但是不能通过值获取 key
- 在一个 dictionary 中不能有重复的 key。给一个存在的 key 赋值会覆盖原有的值。 在任何时候都可以加入新的 key-value 对。这种语法同修改存在的值是一样的。
- 当使用 dictionary 时, 您需要知道: dictionary 的 key 是大小写敏感的
- Dictionary 不只是用于存储字符串。Dictionary 的值可以是任意数据类型, 包括字符串, 整数, 对象, 甚至其它的 dictionary。在单个 dictionary 里, dictionary 的值并不需要全都是同一数据类型, 可以根据需要混用和匹配。 Dictionary 的 key 要严格多了, 但是它们可以是字符串, 整数和几种其它的类型 (后面还会谈到这一点) 。也可以在一个 dictionary 中混用和配匹 key 的数据类型
- del 允许您使用 key 从一个 dictionary 中删除独立的元素。
- clear 从一个 dictionary 中清除所有元素。注意空的大括号集合表示一个没有元素的 dictionary。
-----------------------------------------------------------------------------------------------------------------------------------------------
14. 元组
tuple是python中一个相对简单的类型,它的特点是:有顺序的、不可变的。因此,很显然地tuple有像list和string一样的 indexing和slicing(分片)的功能,可以通过标号对成员进行访问。
A. 定义tuple
T = (1, 2, 3, 4)
B. 取 元组 的值
T[0]
C. 连接两个 元组 ,生成新的 元组
T + (5, 6)
--------------------------------------------------------转载-----------------------------------------------------------------------------
- Tuple 是不可变 list。 一旦创建了一个 tuple 就不能以任何方式改变它。
- 定义 tuple 与定义 list 的方式相同, 除了整个元素集是用小括号包围的而不是方括号。
- Tuple 的元素与 list 一样按定义的次序进行排序。 Tuples 的索引与 list 一样从 0 开始, 所以一个非空 tuple 的第一个元素总是 t[0]。
- 负数索引与 list 一样从 tuple 的尾部开始计数。
- 与 list 一样分片 (slice) 也可以使用。注意当分割一个 list 时, 会得到一个新的 list ;当分割一个 tuple 时, 会得到一个新的 tuple。
- Tuple 没有方法: 没有 append 或 extend 方法、 没有 remove 或 pop 方法、 没有 index 方法、 可以使用 in 来查看一个元素是否存在于 tuple 中。
-----------------------------------------------------------------------------------------------------------------------
15.集合
A. 定义集合
X = set('spam') 2.6 version ruby
Y = {'h', 'a', 'm'} 3.0 version ruby
{x ** 2 for x in [1, 2, 3, 4]}
----------------------------------------------------------------------------转载--------------------------------------------------------------------------------------------
python的set和其他语言类似, 是一个 无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.
sets 支持 x in set , len(set) , 和 for x in set 。作为一个无序的集合,sets 不记录元素位置或者插入点。因此,sets 不支持 indexing, slicing, 或其它类序列(sequence-like)的操作。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
16.布尔值
False, True
True==1
17.判断变量类型
type(L)
18.定义类
class Worker:
def __init__(self, name, pay): # Initialize when created
self.name = name # self is the new object
self.pay = pay
def lastName(self):
return self.name.split()[-1] # Split string on blanks
def giveRaise(self, percent):
self.pay *= (1.0 + percent) # Update pay in-place
>>> bob = Worker('Bob Smith', 50000) # Make two instances
>>> sue = Worker('Sue Jones', 60000) # Each has name and pay attrs
>>> bob.lastName() # Call method: bob is self
'Smith'
>>> sue.lastName() # sue is the self subject
'Jones'
>>> sue.giveRaise(.10) # Updates sue's pay
>>> sue.pay
1.类的每个方法中必须带self参数。self相当于以前的this。
2.用return才有返回值。
3.类的构造函数是_init_方法