您的位置:首页 > 编程语言 > Python开发

两篇文章掌握Python语法和内置函数功能(第一篇)

2017-09-04 16:59 543 查看


Overview

Python是一种动态,解释型语言。它的变量、参数、函数或者一些在源码中的方法都不需要类型声明。你并不需要编译时的类型检查,python会在运行时确定所有值的类型和标记运行到的有错误的代码。


字符串

Python字符串像Java一样都是不可变的。当我们写这样一个表达式的时候,例如表达式(‘hello’ + ‘world’),它会新构建一个字符串’hellothere’,而不会在先前的字符串上去做修改。

Python没有++操作符,但是有+=、-=操作符。

Python既可以用双引号也可以用单引号来表示字符串。例如:
"xlinsist" or 'xlinsist'

#还可以嵌套着写
'xl"insist"xl'
1
2
3
4
1
2
3
4

Python可以用*号来表示很多个重复的字符串。例如:
#打印66个感叹号
'!' * 66
1
2
1
2

Python索引字符串方式:
#索引第一个字符串
'i love python'[0]

#索引倒数第三个字符串
'i love python'[-3]

#获取'love'子串
'i love python'[2:6]

#获取'python'子串
'i love python'[7:]
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11

注意:当我们截取字符串时,如果单个索引超出字符串可以被索引的范围,Python解释器将会报错。但是如果是一个范围索引(例如上面的[2:6])的话,什么情况下都不会报错,只有可能为空串。

find(‘other’):返回第一次遇到的’other’字符串索引,如果没有发现,则返回-1
#返回数字2
'i love python'.find('love')

#返回数字14,这是因为它将会从索引3(包括3)以后的位置去查询目标
'i love python love'.find('love', 3)
1
2
3
4
5
1
2
3
4
5

字符串的len(string)方法:返回字符串的长度。注意:不要使用len做为变量名。

字符串的str()方法:把给定的值转换成字符串形式。例如:
pi = 3.14
##text = 'The value of pi is ' + pi     #这种形式不允许
text = 'The value of pi is '  + str(pi)  # 这种是OK的
1
2
3
1
2
3

下面的s代表一个字符串:

s.lower() – 返回小写的字符串

s.upper() – 返回大写的字符串

s.strip() – 返回去除空格的字符串

s.isalpha() – 如果字符串中至少有一个字符并且所有的字符是按字母表顺序的则返回TRUE,否则FALSE。

s.isdigit() – 如果字符串中至少有一个字符并且所有的字符是数字则返回TRUE,否则FALSE。

s.isspace() – 如果字符串中至少有一个字符并且所有的字符都是由空白字符组成则返回TRUE,否则FALSE。

s.startswith(‘other’) – 如果字符串以’other’串开头,则返回TRUE。

s.endswith(‘other’) – 如果字符串以’other’串结尾,则返回TRUE。

s.replace(‘old’, ‘new’ [, count]) – 把字符串中所有出现的’old’替换成’new’,并把这个新串作为复本要返回,并不改变原字符串的内容。如果指定可选的count参数,那么则替换前count个子串。

split([sep[, maxsplit]]) – 用给定的分割符分割字符串并以list形式返回。有2个特别之处如下:
如果字符串中有连续的分割符,则被分割成空串。例如:
s='xl<><>insist' 用s.split('<>') 则拆分成['xl', '', 'insist'] ;但是用s.split('<><>') 则拆分成['xl', 'insist']

如果不给参数直接拆分的情况下,则把所有的空白字符做为分割符。例如:
' 1 2 3 '.split() 则拆分成['1', '2', '3']


s.join(list) – 与split()方法相反,它将给定的list中的元素用s连接起来。例如:
'---'.join(['aaa', 'bbb', 'ccc']) -> aaa---bbb---ccc


所有关于字符串的方法查看官方文档:http://docs.python.org/library/stdtypes.html#string-methods


列表(lists)

定义一个列表并访问其元素:
colors = ['red', 'blue', 'green']
print colors[0]    ## red
print colors[1]    ## blue

# 打印列表的长度
print len(colors)  ## 3

# 访问和替代列表中的元素
list = ['a', 'b', 'c', 'd']
print list[1:-1]   ## ['b', 'c']
list[0:2] = 'z'    ## replace ['a', 'b'] with ['z']
print list         ## ['z', 'c', 'd']

# 把两个列表的元素加在一起
['xl', 'insist'] + ['love', 'dog']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

把列表赋值给其它变量:
a = ['xl', 'love', 'pig']
b = a   ##这没有产生一个复本,这种赋值让两个变量都指向内存中的同一个列表

# 如果我改变a[0]的值,那么b[0]的值也会改变
a[0] = 'wjx'
1
2
3
4
5
1
2
3
4
5

迭代列表中的元素:
squares = [1, 4, 9, 16]
sum = 0
for num in squares:
sum += num
print sum  ## 30

# 查看数字5是否在列表中
if 5 in squares:
print 'nb'

# for/in 语句也可以打印字符串
for s in 'xlinsist':
print s
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13

Range函数用法:
# print the numbers from 0 through 99
for i in range(100):
print i

range(a, b) 返回a, a+1, ... b-1
1
2
3
4
5
1
2
3
4
5

列表中的一些常用方法如下:

list.append(elem) – 加元素到列表的末尾。它仅仅是修改列表,并不返回一个新的列表。

list.insert(index, elem) – 把元素插入到给定的位置中

list.extend(list2) – 把list2中的元素加到list的末尾。

list.index(elem) – 返回指定元素的索引,如果不存在这个元素则报错(use “in” to check without a ValueError)

list.remove(elem) – 移除在列表中第一次出现的元素,如果不存在报错。

list.reverse() – 反转列表中的元素

list.pop(index) – 移除并返回给定索引的元素。如果没有指定索引,返回列表中最右边的元素。


排序

sorted(list)函数接收一个list并返回一个排好序的list,并不改变原来的list。例如:
a = [5, 1, 4, 3]
print sorted(a)  ## [1, 3, 4, 5]
print a  ## [5, 1, 4, 3]
1
2
3
1
2
3

sorted函数可以接受任何可迭代的集合作为参数,不仅仅是list,它也可以定制比较规则通过指定的参数。例如:
strs = ['aa', 'BB', 'zz', 'CC']
print sorted(strs)  ## ['BB', 'CC', 'aa', 'zz'] (大小写敏感)
print sorted(strs, reverse=True)   ## ['zz', 'aa', 'CC', 'BB']
1
2
3
1
2
3

用key定制排序
strs = ['ccc', 'aaaa', 'd', 'bb']
在比较之前,用这个指定的"key"函数转换list中的元素。“key”函数接收一个值并返回用于比较的代理值,具体请看下图。
print sorted(strs, key=len)  ## ['d', 'bb', 'ccc', 'aaaa']
1
2
3
1
2
3



再来一个例子:
## "key" argument specifying str.lower function to use for sorting
print sorted(strs, key=str.lower)  ## ['aa', 'BB', 'CC', 'zz']
1
2
1
2

我们也可以定制自己的“key”函数:
## Say we have a list of strings we want to sort by the last letter of the string.
s = ['xc', 'zb', 'yd' ,'wa']

## Write a little function that takes a string, and returns its last letter.
## This will be the key function (takes in 1 value, returns 1 value).
def MyFn(s):
return s[-1]

## Now pass key=MyFn to sorted() to sort by the last letter:
print sorted(strs, key=MyFn)  ## ['wa', 'zb', 'xc', 'yd']
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

sort()方法改变底层的list返回None



sort()方法必须被list调用,它不能被所有可枚举的集合所调用,但是上面的sorted()方法可以。sort()方法不需要创建一个新的list,因此它为已经在list中的元素做排序比sorted方法更快。


Tuples

Tuples和list一样,除了它们是不可变的和它的长度是固定的。例如:
tuple = (1, 2, 'hi')
print len(tuple)  ## 3
print tuple[2]    ## hi
tuple[2] = 'bye'  ## NO, tuples cannot be changed
tuple = (1, 2, 'bye')  ## this works
1
2
3
4
5
1
2
3
4
5

为了创建size-1的tuple,单个元素的后面必须跟随一个逗号:
tuple = ('hi',)   ## size-1 tuple
1
1

为了区分tuple和普通括号中的表达式,所以我们加逗号。



上图中的int类型对象并没有len()函数。

我们也可以按照下面的方式分配tuple:
(x, y, z) = (42, 13, "hike")
print z  ## hike

##如果尺寸不匹配会报错
(err_string, err_code) = Foo()  ## Foo() returns a length-2 tuple
1
2
3
4
5
1
2
3
4
5

一个更加简洁与牛逼的方法玩list

语法为:[ expr for var in list ]
nums = [1, 2, 3, 4]
squares = [ n * n for n in nums ]   ## [1, 4, 9, 16]

strs = ['hello', 'and', 'goodbye']
shouting = [ s.upper() + '!!!' for s in strs ]
## ['HELLO!!!', 'AND!!!', 'GOODBYE!!!']
1
2
3
4
5
6
1
2
3
4
5
6

我们也可以加if测试
## Select values <= 2
nums = [2, 8, 1, 6]
small = [ n for n in nums if n <= 2 ]  ## [2, 1]

## Select fruits containing 'a', change to upper case
fruits = ['apple', 'cherry', 'bannana', 'lemon']
afruits = [ s.upper() for s in fruits if 'a' in s ]
## ['APPLE', 'BANNANA']
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8

以上内容整理自Google’s Python Class

https://developers.google.com/edu/python/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: