python学习笔记(一) - 基础

时间:2021-07-04 02:31:29

一. 第一个小程序:

python语法比较简单,采用缩进的方式,如下所示:

a = 100
if a >= 0:
print a
else:
print -a
使用#进行注释,其他的每一行都是一个语句,当语句以冒号“:”结尾时,缩进的语句视为代码块。

按照约定俗成,一般使用Tab键缩进,或按四个空格。

注意:python程序是大小写敏感的。


二. 数据类型和变量

(1) 数据类型:

a. 整数:

python可以处理任意大小的整数

可以使用十六进制表示整数:0x前缀和0-9,a-f。如0xff00,0xa5b4c3d2


b. 浮点数:

浮点数就是小数,按照科学计数法表示时,一个浮点数的小数点位置是可变的。比如:1.23x109和12.3x108是相等的

对于很大或很小的浮点数,就需要用科学计数法表示,把10用e替代,1.23x109就是1.23e9或者12.3e8


c. 字符串:

python中字符串用单引号 ‘ ’ 或双引号“ ” 括起来。

如果单引号 ’ 本身也是一个字符,那就可以用双引号“ ” 括起来,如:print “I'm ok”

如果字符串内部既包含单引号 ‘ 又包含双引号“ ,那就用转义字符 \ 来标识,如:print "I\'m \"ok\""

右斜杠 \ 可以转义很多字符,比如 \n 表示换行, \t 表示制表符,\\ 表示 \ 

如果字符串里面有很多字符都需要转义,那就需要加很多 \ ,为了简化,python还允许用r' '表示‘ ’内部的字符串默认不转义。如:print r'\\\t\\'

>>> print '\\\t\\'
\ \
>>> print r'\\\t\\'
\\\t\\
如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,python允许用'''  ''' 的格式表示多行内容,如:

print '''line1
line2
line3'''

d. 布尔值:

一个布尔值只有True、False两种值,要么是True,要么是False,请注意大小写

在Python中,可以直接用True、False表示布尔值

>>> 3 > 2
True
>>> 3 > 5
False
布尔值可以用and、or、not运算

>>> True and True
True
>>> True and False
False
>>> False and False
False

>>> True or True
True
>>> True or False
True
>>> False or False
False

>>> not True
False
>>> not False
True


e. 空值

空值是python里一个特殊的值,用None表示。None不能理解为0,因为0时有意义的,而None是一个特殊的空值。


(2) 变量

变量名必须是字母、数字、和下划线的组合,且不能以数字开头。

可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,例如:

a = 123 # a是整数
a = ‘ABC’ # a变为字符串
这种变量本身类型不固定的语言成为动态语言,和JS很像,而Java是静态语言,因为它在定义变量时必须指定变量类型,

如:int a = 123;


(3) 常量

所谓常量就是不能变得变量,在python中,通常常量全部大写,这个和Java一样
如 PI = 3.1415926,但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变。


三. 字符串和编码

1. 编码

ASCII编码:只有127个字母被编码到计算机中,即大小写英文字母、数字和一些符号,只使用一个字节保存。

Unicode编码:把所有语言都统一到一套编码里,这样就不会再有乱码问题了,一般用两个字节保存一个字符。但是如果所有的语言都统一成Unicode

编码,乱码问题就此消失了,但是,如果我们写的文本基本上都是英文的话,用Unicode编码会比ASCII编码多出一倍的存储空间,在存储和传输上就

不划算了。本着节约的精神,又出现了把Unicode编码转为可变长编码的UTF-8编码


由于python源代码是一个文本文件,所以,当源码中包含中文的时候,在保存源码时,需要指定保存为utf-8编码。当python解析器读取源代码时,

为了让它按utf-8读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
第一行注释是为了告诉linux系统,这是一个python可执行程序。

第二行注释是为了告诉python解释器,按照utf-8编码读取源代码,否则,你在源码中写的中文输出可能会有乱码。

2. 格式化字符串:

在python中,使用%来格式化字符串,%s表示用字符串替换,%d表示用整数替换,%f表示浮点数。有几个%?占位符,后面就跟几个变量或者值,

顺序要对应好。如果只有一个%?,括号可以省略。

>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
有些时候,字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%

>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'

四. 使用list和tuple

(1) list

list是python中内置的一种有序集合,可以随时添加和删除其中的元素。

比如,列出班里所有同学的名字,可以用一个list表示。变量classmates就是一个list

>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']

a. 获取list元素个数:len(classmates)

b. 通过索引访问list中每个位置的元素(从0开始): classmates[0] 

如果要取最后一个元素,也可以用-1:classmates[-1],倒数第二个就是classmates[-2]

c. 往list中追加元素到末尾:classmates.append('jim')

d. 插入元素到指定位置:classmates.insert(1, 'tom')

e. 删除list末尾的元素:classmates.pop()

f. 删除指定位置的元素:classmates.pop(2)

g. 把某个元素替换成别的元素,可以直接赋值给对应索引位置:classmates[2] = 'jack'


list里面可以嵌套另一个list,比如:

>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
4
我们可以把s看成一个二维数组,如果要拿到‘php’,可以写s[2][1]

(2) tuple

tuple和list很相似,但是tuple一旦初始化就不能修改。所以tuple中没有添加元素或删除元素的方法。

>>> classmates = ('Michael', 'Bob', 'Tracy')

不可变的tuple有什么用?

因为tuple不可变,所以代码更安全,如果可能,能用tuple代替list就尽量用tuple吧。


使用tuple需要小心一点,以防掉入它的陷阱:

** 陷阱1:只有1个元素的tuple定义时必须加一个逗号,以消除歧义,因为括号会让解析器以为它是数学公式中的小括号

>>> t = (1,)
>>> t
(1,)
** 陷阱2:tuple不可变,但是如果tuple里面存了一个list的话,那这个list却是可变的。

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

五. 条件判断和循环

(1) 条件判断:

根据用户年龄打印不同的内容:

age = 3
if age >= 18:
print 'adult'
elif age >= 6:
print 'teenager'
else:
print 'kid'
if 判断条件可以简写,比如:

if x:
print 'True'
只要x是非零数值、非空字符串、非空list就判断为True,否则为False


(2) 循环

a. for循环

sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
sum = sum + x
print sum
如果求1-100的整数之和,可以使用range()函数,它可以生成一个整数序列

b. while循环

求100以内奇数之和:

sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print sum

六. 使用dict和set

(1) dict

和java中的map一样,使用key - value存储

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
a. 存入一个值:d['Adam'] = 67

b. 一个key对应一个value,如果key不存在会报错, 为了避免错误,有两种方法判断key是否存在

一是通过in判断key是否存在:‘Tracy’ in d     # 返回True

二是通过dict提供的get方法:d.get('jim')    # 返回None

c. 删除一个key: d.pop('Bob')


(2) set

set和java中的set也一样,key不能重复,不存储value

>>> s = set([1, 2, 3])
>>> s
set([1, 2, 3])
1. 添加元素到set中: s.add(4)

2. 从set中删除元素:s.remove(4)

3. set可以做数学意义上的交集、并集操作

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
set([2, 3])
>>> s1 | s2
set([1, 2, 3, 4])

原文请参考:廖雪峰