作用区域
1 | #!/usr/bin/python |
函数内的x是local的,不改变x=10的值。在函数func_1内指示y是global的,函数内改变
y的值,函数外y=3变成y=5。
数据存储方式
1 | #!/usr/bin/python |
python中的数据都是类。python中的数据分为不可变变量和可变变量,其中数字,字符串
是不可变变量,其他的是可变变量。id(x)显示的是x变量的存储’地址’,根据id()可以了解
可变变量和不可变变量的性质。x的值不一样,id(x)的结果是不一样的,x是一个数字,是
不可变的,所以为x赋新值本质上是重新创建了一个变量,x_list是一个列表,是可变的,
所以改变x_list的值,就是改变它本身的值。y = x并没有新建了一个变量,而是为x变量
增加了一个叫y的索引,本质上是一个存储结构,所以id(x) = id(y); 所以改变x_list,
y_list也跟着变了。
典型数据结构
列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#!/usr/bin/python
global shoplist
shoplist = ['apple', 'mango', 'carrot', 'banana']
def print_shoplist():
print shoplist
lenth = shoplist.__len__()
print "len of shoplist is", lenth
shoplist.sort()
print_shoplist()
shoplist.append('pear')
print_shoplist()
shoplist.__delitem__(0)
print_shoplist()
print shoplist[0]
print shoplist[-1]
# use help() to check functions which list offered
# help(list)列表是python的内置数据结构, 存放一组数据,列表里面的值是可以改变的。用help(list)
可以查看列表类中所包含的方法。上面列出几个方法:len__返回列表的长度,sort对
列表的数据排序,append在列表的最后加入一个数据,__delitem(x)删去索引是x的数据.
列表中数据的索引和c语言中数组的下标一样,但是可以逆向索引,如shoplist[-1]得到最
后一个元素的值。元组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#!/usr/bin/python
zoo = ('wolf', 'elephant', 'penguin')
new_zoo = ('monkey', 'dolphin', zoo)
print "len of zoo is", len(zoo)
print "len of new zoo is", len(new_zoo)
print "2 of new zoo is", new_zoo[2]
print "[2][2] of new zoo is", new_zoo[2][2]
print "%s is %d years old" %('John', 12)
def func_return_multi():
return 'John', 12
print func_return_multi()元组也是python的内置数据结构,但是元组里的值是不可变的,当然如果元组里的元素是
一个列表,列表里的值是可以变的。元组的用途有很多,比如上面的格式话输出,当有多
个输出值时,它们的真值要用一个元组包含起来; python中的函数可以一次返回多个值,
返回的多个值被包含在一个元组中。字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14#!/usr/bin/python
string = "0123456789"
print "string is", string
new_string = string[0:5]
print "new_string is", new_string
print 'string 2 to end is', string[2:]
print 'string 1 to -1 is', string[1:-1]
print 'string start to end is', string[:]
print 'string start to end is', string[::4]
# list and tuple also have those kinds of operations上面是字符串的切片操作,列表和元组也有相同的操作。
字典
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#!/usr/bin/python
b = {
'Swaroop': 'swaroopch@byteofpython.info',
'Larry' : 'larry@wall.org',
'Matsumoto' : 'matz@ruby-lang.org',
'Spammer' : 'spammer@hotmail.com'
}
print b['Larry']
# add a key->value in dictionary
b['Sherlock'] = "Sherlock@gmail.com"
print b
b.pop('Larry')
print b
if 'Larry' in b:
print "Larry is in b"
else:
print "Larry is not in b"字典又一一对应的一组key->value组成,key需要是不可变变量。
集合
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#!/usr/bin/python
s = set([1, 2, 3, 4])
print s
# add a key in set
s.add(10)
print s
s.remove(1)
print s
if 2 in s:
print "2 is in s"
else:
print "2 is not in s"集合是一组值的集合,用一个列表初始化。集合中的元素也需要是不可变变量。
函数
- 函数基础函数名是一个指向函数对象的引用,所以可以把一个函数名赋值给一个变量。函数的参数可以
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61#!/usr/bin/python
def test_add(a, b):
return a + b
print "1 + 2 =", test_add(1, 2)
add_test = test_add
print "1 + 2 =", add_test(1, 2)
# need "pass" to fill this "none content function"
def nop():
pass
# default input
def ball(r, color = "red", vendor = "A", llist = [1, 2, 3]):
llist.append(4)
print r
print color
print vendor
print llist
print "test_1"
ball(5)
print "test_2"
ball(5, "blue")
print "test_3"
ball(5, vendor = "B")
print "test_4"
ball(5, llist = [4, 5, 6])
ball(5)
# variable input
print
print "variable input test"
def sum(*number):
sum = 0
for i in number:
sum = sum + i
return sum
print "sum is", sum(1, 2, 3)
num = [1, 2, 3, 4]
print "sum is", sum(*num)
# key word input
print
print "key word input test"
def key_test(a, b, **c):
print a
print b
print c
print "key is", key_test(1, 2)
print
print "key is", key_test(1, 2, name = "Sherlock")
print
dict_test = {"name" : "John", "age" : 12}
print "key is", key_test(1, 2, **dict_test)
是默认参数,可变参数,关键字参数等。当函数带默认参数时,默认参数需要是不可变参数。
不然就像上面代码中显示的那样,如果函数中改变这个参数的值,以后这个参数的值相应的
也都改变了。函数可以带可变参数, 可变参数可以直接传入函数,也可以先把所有参数组成
一个列表,再通过list传入。通过dictionary的方式可以传入一个字典。
面向对象
1 | #!/usr/bin/python |
python中不需要在变量使用前先定义。私有变量需要加”__”的前缀。注意: raw_input()输入
的变量是字符串的,要输入数字需要:int(raw_input())