Python学习笔记(一):Python基础

Python基础

Python使用缩进来组织代码块,请务必遵守约定俗成的习惯,坚持使用4个空格的缩进。
在文本编辑器中,需要设置把Tab自动转换为4个空格,确保不混用Tab和空格。

1 数据类型和变量

计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,能够直接处理的数据类型有以下几种:

数据类型

  • 整数
    如1,100,0xff00

  • 浮点数
    如1.23,-9.01,12.3e8,1.2e-5

  • 字符串
    如’abc’,“xyz”。
    如果字符串内部既包含’又包含"怎么办?可以用转义字符 \ 来标识,比如:

'I\'m \"OK\"!'

表示的字符串内容是:

I'm "OK"!
  • 布尔值
    布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来。
  • 空值
    空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
    此外,Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型,我们后面会继续讲到。

变量和常量

变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。
变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头。

所谓常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量。

2 字符串和编码

  • 编码
    Python 3的字符串使用Unicode,直接支持多语言。当str和bytes互相转换时,需要指定编码。最常用的编码是UTF-8。
    由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

  • 格式化
    在Python中,采用的格式化方式和C语言是一致的,用%实现,举例如下:
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'

常见的占位符有:

占位符替换内容
%d整数
%f浮点数
%s字符串
%x十六进制整数

3 使用list和tuple

list

Python内置的一种数据类型是列表:list。用中括号([ ])表示列表的开始和结束,元素之间用逗号(,)分隔。
list是一种有序的集合,可以随时添加和删除其中的元素。用索引来访问list中每一个位置的元素,记得索引是从0开始的。如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素。
列表元素增加append() insert()
列表元素查找index()下标方法切片方法in成员运算
列表元素修改指定下标修改
列表元素删除clear()pop()remove()del函数
列表元素合并extend()‘+’号合并
列表元素排序sort()

列表基本操作方法表格总结:

方法名称方法功能描述
append在列表尾部增加元素
clear列表清空
copy复制生成另一个列表
count统计指定元素个数
extend两个列表元素合并
index返回指定元素的下标
insert在指定位置插入元素
pop删除并返回指定下标对应的元素
remove删除列表中指定的元素
reverse反转列表元素顺序
sort对列表元素进行排序
len统计元素个数
max返回最大值的元素
min返回最小值的元素
tuple将列表转换为元组
list将元组转换为列表
type返回对象类型
del删除整个列表/元组对象
sum对所有元素求和
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']

tuple

另一种有序列表叫元组:tuple。tuple和list非常类似,主要区别有以下两点:
(1)元组的元素不能变动。
(2)元组用小括号()表示。
在上面的表格中,所有对元素进行修改的函数不能作用于元组,但其他依然可用。
tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来。定义有两个元素的tuple、空的tuple、一个元素的tuple分别为:

a=(1,2)
b=()
c=(1,)

只有1个元素的tuple定义时必须加一个逗号,,来消除歧义。否则,就会按小括号进行计算,计算结果是1。
最后来看一个“可变的”tuple:

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

表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向’a’,就不能改成指向’b’,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
理解了“指向不变”后,要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变。

4 条件判断if

条件判断是python语言基本的条件分支判断语句。
格式一:单分支判断

age = 20
if age >= 18:
    print('your age is', age)
    print('adult')

格式二:多分支判断

age = 3
if age >= 18:
    print('your age is', age)
    print('adult')
else:
    print('your age is', age)
    print('teenager')

格式三:多条件多分支判断

age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')

5 循环for和while

for…in

Python的循环有两种,一种是for…in循环,依次把list或tuple中的每个元素迭代出来,看例子:

names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)

执行这段代码,会依次打印names的每一个元素:

Michael
Bob
Tracy

while

第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。比如我们要计算100以内所有奇数之和,可以用while循环实现:

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

在循环内部变量n不断自减,直到变为-1时,不再满足while条件,循环退出。

break和continue

在循环中,break语句可以提前退出循环。也可以通过continue语句,跳过当前的这次循环,直接开始下一次循环。这两个语句通常都必须配合if语句使用。要特别注意,不要滥用break和continue语句。break和continue会造成代码执行逻辑分叉过多,容易出错。大多数循环并不需要用到break和continue语句,下面的两个例子,都可以通过改写循环条件或者修改循环逻辑,去掉break和continue语句。

n = 1
while n <= 100:
    if n > 10: # 当n = 11时,条件满足,执行break语句
        break # break语句会结束当前循环
    print(n)
    n = n + 1
print('END')
n = 0
while n < 10:
    n = n + 1
    if n % 2 == 0: # 如果n是偶数,执行continue语句
        continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
    print(n)

6 使用dict和set

dict

Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。用大括号({ })表示字典的开始和结束,元素之间用逗号(,)分隔

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。
和list比较,dict有以下几个特点:
1.查找和插入的速度极快,不会随着key的增加而变慢;
2.需要占用大量的内存,内存浪费多。
而list相反:
1.查找和插入的时间随着元素的增加而增加;
2.占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key:

>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

字典元素增加:赋值方法setdefault()
字典值查找:字典名+[key]get()
字典值修改:赋值方法update()
字典元素删除:del函数pop()popitem()
字典遍历操作:(1)遍历键值对:items() (2)遍历所有key:for i in 字典变量for i in 字典变量.keys() (3)遍历所有value:for i in 字典变量:print(字典变量[i])for i in 字典变量.values()

字典基本操作方法表格总结

方法名称方法功能描述
clear字典清空
copy复制生成另外一个字典
fromkeys使用给定的键建立新的字典。每个键默认对应的值为None
get根据指定键,返回对应值;访问键不存在时,返回None
items以元组数组的形式返回字典中的元素
keys以可以浏览的类似列表形式返回字典中的键
pop删除指定键的元素,并返回指定键对应的值
popitems随机返回元素,并删除元素
setdefault当字典中的键不存在时,设置键值对;当存在键时,获取键对应的值
values以可以浏览的类似列表的形式返回字典中的值
update利用一个字典更新另外一个字典

set

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key
要创建一个set,需要提供一个list作为输入集合:

>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。。
重复元素在set中自动被过滤:

>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}

通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

通过remove(key)方法可以删除元素:

>>> s.remove(4)
>>> s
{1, 2, 3}

set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

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

set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值