python
对象
内存块
引用
在python中,变量也成为对象的引用。而且在python中,变量不需要显示声明类型,根据变量引用的对象,python自动确定数据类型
变量的简单赋值语句
变量的声明和赋值:变量名 = 表达式
变量在使用前必须先被初始化(先被赋值)
a=3
删除变量和垃圾回收机制
a=123
del a #删除a
#栈上的变量被删除,堆上内容被python回收
链式赋值
一个对象赋值给多个变量
x=y=123
#相当于
x=123;y=123
系列解包赋值
系列数据赋值给对应相同个数的变量(个数必须保持一致)
-
>>>>a,b,c=4,5,6 >>>#等价于 >>>a=4;b=5;c=6
使用系列解包赋值实现变量交换
>>>a,b=1,2
>>>a,b=b,a
>>>#实现了a与b的交换
常量
Python不支持常量,(常量用大写)逻辑上规定不能改
>>>MAX_SPEED = 120
``
#### 整数
#### 使用int()实现类型转化:
- 1.浮点数直接舍去小数部分,int(9.9) 结果是:9
- 2.布尔值True转为1,False转为0.
- 3.字符串符合整数格式(浮点数格式不行)则直接转成对应整数,否则报错
#### 自动转型
- 整数和浮点数混合运算时,表达式结果自动转型成浮点数:2 + 8.0 结果为 10.0
#### 整数可以有多大
- Python3 中,int可以存储任意大小的整数,long被取消。可以做超大数的计算,而不会造成 “ 整数溢出 ” 。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jSP7bVau-1635233806910)(C:\Users\ZHY\AppData\Roaming\Typora\typora-user-images\image-20210908214236570.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kImohTGi-1635233806912)(C:\Users\ZHY\AppData\Roaming\Typora\typora-user-images\image-20210908214523372.png)]
#### 选择结构
#### 单分支选择结构
```python
a = input("请输入一个数")
if int(num) < 10; #int(a) 表示将a强转为int 形
print(a)
条件表达式详解
在选择和循环结构中,条件表达式的值为 False 的情况如下:
- False
- 0
- 0.0
- 空值None
- 空序列对象(空列表、空元祖、空集合、空字典、空字
符串) - 空range对象
- 空迭代对象
其他情况均为True。则,Python所有合法表达式都可以看作条件表达式,甚至包括函数调用的表达式
双分支选择结构
num = input("输入一个数字:")
if int(num)<10:
print(num)
else:
print("数字太大")
三元条件运算符
num = input("请输入一个数字")
print( num if int(num)<10 else "数字太大")
多分支选择结构
score = int(input("请输入分数"))
grade = ''
if(score<60):
grade = "不及格"
if(60<=score<80):
grade = "及格"
if(80<=score<90):
grade = "良好"
if(90<=score<=100):
grade = "优秀"
print("分数是{0},等级是{1}".format(score,grade))
选择结构嵌套
score = int(input("请输入一个在 0-100 之间的数字: "))
degree = "ABCDE"
num = 0
if score>100 or score<0:
score = int(input("输入错误! 请重新输入一个在 0-100 之间的数字: "))
else:
num = score//10
if num<6:num=5
print("分数是{0},等级是{1}".format(score,degree[9-num]))
循环结构
while循环
num = 0
while num<=10:
print(num)
num += 1
for循环和可迭代对象遍历
for x in (20,30,40):
print(x*3)
可迭代对象
Python包含以下几种可迭代对象:
- 序列 (包含:字符串、列表、元组)
- 字典
- 迭代器对象(iterator)
- 生成器函数(generator)
- 文件对象
遍历字符串中的字符
for x in "sxt001":
print(x)
遍历字典
d = {
'name':'gaoqi','age':18,'address':'北京'}
for x in d:
print(x)
for x in d.values():
print(x)
range对象
range 对象是一个迭代器对象,用来产生指定范围的数字序列。格式为:range(start, end [,step]) 生成的数值序列从 start 开始到 end 结束(不包含 end)。若没有填写 start,则默认从 0开始。step 是可选的步长,默认为 1。
sum_all = 0
sum_even = 0
sum_odd = 0
for num in range(101):
sum_all += num
if num%2==0:
sum_even += num
else:
sum_odd += num
print("{0},{1},{2}".format(sum_all,sum_odd,sum_even))
Python format 格式化函数
Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。基本语法是通过 {} 和 : 来代替以前的 % 。format 函数可以接受不限个参数,位置可以不按顺序。
>>>"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
'hello world'
>>> "{0} {1}".format("hello", "world") # 设置指定位置
'hello world'
>>> "{1} {0} {1}".format("hello", "world") # 设置指定位置
'world hello world'
break语句
continue语句
else语句
循环代码的额优化
- 尽量减少循环内部不必要的计算
- 嵌套循环中,尽量减少内层循环的计算,尽可能向外提‘
- 局部变量查询较快,尽量使用局部变量
#循环代码优化测试
import time
start = time.time()
for i in range(1000):
result = []
for m in range(10000):
result.append(i*1000+m*100)
end = time.time()
print("耗时: {0}".format((end-start)))
start2 = time.time()
for i in range(1000):
result = []
c = i*1000
for m in range(10000):
result.append(c+m*100)
end2 = time.time()
print("耗时: {0}".format((end2-start2)))
其他优化手段
- 连接多个字符串,使用join()而不使用+
- 列表进行元素插入和删除,尽量在列表尾部操作
python dict
dict = {
'name': 'runoob', 'likes': 123, 'url': 'www.runoob.com'}
使用zip()并行迭代
names= ("高企","高老二","高老三","高老四")
ages = (18,16,20,25)
jobs = ("老师","程序员","公务员","公安")
for name,age,job in zip(names,ages,jobs):
print("{0}--{1}--{2}".format(name,age,job))
推导式创建序列
列表推导式
-
[表达式 for item in 可迭代对象 ] \ {表达式 for item in 可迭代对象 if 条件判断}
-
>>> [x for x in range(1,5)] [1, 2, 3, 4] >>> [x*2 for x in range(1,5)] [2, 4, 6, 8] >>> [x*2 for x in range(1,20) if x%5==0 ] [10, 20, 30] >>> [a for a in "abcdefg"] ['a', 'b', 'c', 'd', 'e', 'f', 'g']北京尚学堂· 百战程序员 实战 系统 好教育 >>> cells = [(row,col) for row in range(1,10) for col in range(1,10)] #可以使用两个循环 >>> for cell in cells: print(cell)
字典推导式
-
{key_expression : value_expression for 表达式 in 可迭代对象}
-
>>> my_text = ' i love you, i love sxt, i love gaoqi' >>> char_count = { c:my_text.count(c) for c in my_text} >>> char_count
集合推导式
-
{表达式 for item in 可迭代对象 } 、 {表达式 for item in 可迭代对象 if 条件判断}
-
{ x for x in range(1,100) if x%9==0}
生成器推导式(生成元组)
一个生成器只能运行一次。第一次迭代可以得到数据,第二次迭代发现数据已经没有了。
gnt = (x for x in range(1,100) if x%9==0)
for x in gnt:
print(x,end=' ')
综合练习
绘制棋盘
import turtle
n = turtle.Pen()
n.speed(100)
n.width(1)
for i in range(18