Python的基础语法(二)
0. 前言
接着上一篇博客的内容,我将继续介绍Python相关的语法。部分篇章可能不只是简单的语法,但是对初学者很有帮助,也建议读懂。
1. 表达式
由数字、符号、括号、变量等组成的组合。
- 算术表达式
- 逻辑表达式
- 赋值表达式
- 在Python中,变量无需实现声明,也不需要指定类型。
a = 1 # 无需声明和指定类型
在Python中,赋值即定义,如果一个变量已经定义,赋值相当于重新定义。
2. 内存管理
在其他语言,如C++和C中,内存管理是非常重要的,因为在一段内存地址被释放之后,内存中会留下一个“空洞”,造成内存碎片化。通常地,开发者会利用特定的策略来管理内存,把需要经常变动的值放到一个区域,静态的值放到另一个区域。开发者手动管理维护内存,不仅麻烦,还很容易留下安全隐患。
在Python编程中无须关心变量的存亡,也不关心内存的管理。Python语言和Java一样,采用了类似的垃圾收集的机制(Garbage Collection)。
简单的理解:首先,在Python中,一切皆对象。Python使用引用计数ob_refcnt记录所有对象的引用数。当对象引用数ob_refcnt变为0,它就被认为是生命结束了,内存也会被回收。例如在函数运行结束时,局部变量就会被自动销毁,内存被回收。变量赋值给其他对象时,内存被回收。下面举一个例子:
num1 = 12 # 定义一个变量,这时候在内存中存放12这个值,num标识符对它进行引用,ob_refcnt=1
num2 = num1 # 现在num2和num1的值都在同一个地址,它被引用的次数为2,ob_refcnt=2
# 现在对上面两个变量重新赋值,也就是相当于重新定义
num1 = 1
num2 = 2
# 这个时候,刚才的内存中的12,因为被引用的次数为0,也就是ob_refcnt=2,那么内存就被回收了
缺点:内存回收机制(Grabage Collection)因为是自动的,所以效率注定不高,在对程序性能要求高的环境中,这一点是致命的。 (不过也还是可以自己动手调一下的,这里暂时不提)
作为初学入门的同学,先了解这么多就可以了,如果想再全面地了解,这里推荐一篇博客我认为写得挺好的,以供参考。[点击这里]
3. 程序控制
3.1 顺序结构
所谓顺序结构,也就是串行。就是一条一条语句按照顺序执行。比如:先洗手,再吃饭,再洗碗。
# 下面三种行为按照从上到下的顺序执行
washing_hand() # 洗手
eat() # 吃饭
washing_dishes() #洗碗
3.2 分支结构
分支结构:根据不同情况判断,条件满足执行某条件下的语句。
3.2.1 if...else...语句
比如,小明考试及格,就吃金拱门,考试不及格,就罚做家务。
if score >= 60: # 这里设置60分为及格
eat_KFC() # 及格了就吃金拱门
else: # 否则
do_housework() # 不及格就做家务
if...else...就是Python中用作判断的语句。if后面的条件语句就是判断的依据,它返回的是一个布尔值。而if下面的都是代码块,是在if条件语句为True的时候,才会执行。
3.2.2 if...elif...else...语句
上面的例子是单分支结构,要实现多分支结构该怎么办呢?下面有一个例子:
myScore = 58
if myScore >= 80 and myScore<=100:
print("Good.") # 八十分以上,优秀
elif myScore >=60 and myScore <80:
print("Pass.") # 六十分以上,及格
elif myScore<60 and myScore>=0:
print("Fail.") # 六十分以下,不及格
else: # 在上面条件之外的,也就是小于0分或者大于100分了,那么就算做是错误分数了
print("错误分数")
有部分情况下,条件语句并没有返回一个__布尔值__怎么办呢?在Python中,如果在if后面的条件语句没有返回一个布尔值,那么它会把这个语句放进bool()函数中进行转换,转换后就会返回一个布尔值了。
if 3: # 这里的3并不是一个条件语句,它经过bool()函数转换成布尔值,但是这个操作是我们看不到的
print('True')
else:
print('False')
下面,给出一些常见的对象/常量经过bool()函数转换后的值,以供参考
| 对象/常量 | 值 |
|---|---|
| “”-空字符串 | 假 |
| “string”-非空字符串 | 真 |
| 0 | 假 |
| 非0 - 一个非0实数 | 真 |
| ()空元组 | 假 |
| []空列表 | 假 |
| {}空字典 | 假 |
| None | 假 |
3.3 循环结构
循环结构:条件满足就反复执行,不满足就不执行或不再执行。
3.3.1 while语句
比如,小明在七点前要写作业,小明在7点之后可以看电视,所以他隔一会就检查一次。
time = 5
while time<7: # 这是一个循环体,如果time<7,就会一直循环
do_homework() # 七点前做作业
time += 1 # 每一次循环加一个小时
watching_tv() # 跳出循环之后就执行看电视操作了
和if...else..结构类似,while下面的语句块也是在条件满足的时候执行,直到条件不满足后退出。
3.3.2 for语句
还有另一个语句可以实现循环结构——for语句。他的结构是这样的:
for element in sequence: # 当可迭代对象中有元素可以迭代,进入循环体,执行block
block
上面所提到的可迭代对象,简单理解可以说是一组元素,比如[1, 2, 3]
首先,先介绍一下range(start, stop[, step])函数。
参数说明:
- start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
- stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
- step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
下面再举个for循环的例子:
for i in range(10):
print(i)
执行结果:
0
1
2
3
4
5
6
7
8
9
循环一共执行了10次,每一次i获取range(10)返回的列表中的一个元素。直到range(10)的元素被获取完了,循环就结束了。
3.3.3 continue语句
continue语句的作用是:中断当前循环的当次操作,继续下一次循环,如果没有下一次循环就结束循环。举例,打印10以内的偶数:
for i in range(10):
if i % 2 == 1:
continue
print(i)
3.3.4 break语句
break语句:终止当前循环,跳出循环体。
举例: 列举1000以内被7整除的前20个数
count = 0 # count是一个计数器
for i in range(0, 1000, 7):
print(i)
count += 1 # 每次列举一个数就加1
if count >=20: # 如果count大于等于20
break # 终止当前循环,跳出循环体
注:循环被break打断叫不正常结束,else子句无效
3.3.5 循环 else子句
在while和for后面跟着的一个子句,结构如下
while condition:
block
else: # 在while循环正常结束后执行else里面的代码块
block
for element in sequence:
block
else: # 在for循环正常结束后执行else里面的代码块
block
循环异常抛出也是不正常结束,else子句无效。这种子句在特定情况下很有用,比如用于检测循环是否正常结束。
3.4 嵌套结构
上面我们说的分支和循环,都是可以嵌套的。什么是嵌套呢?下面举个例子,判断一个数为几位数:
print("输入一个0-99999的数")
num = input(">>") # input()函数用作读取键盘输入
num = int(num) # input()函数读取的输入为字符串类型,因为Python是强类型语言,所以这里要做一个类型转换,转换为整型
if num >= 1000:
if num >=10000:
print(5)
else:
print(4)
else:
if num >= 100:
print(3)
elif num >= 10:
print(2)
else:
print(1)
在if...else...中又插入一个或多个if...else...,这种方式就叫做嵌套。
上面的例子中,我并不是从五位数到四位数到三位数这样一路判断下来的,一方面是为了演示嵌套结构,另一方面,我这里用到了二分搜索算法,这种算法从中间开始查找,如果是判断一个一百位数,或者一千位数,这样的算法明显会比顺序查找高效得多。在以后的博客,我会再具体介绍算法相关的内容。
以上为Python基础语法的第二部分,下一个部分将在下一篇博客中介绍。
Python的基础语法(二)的更多相关文章
- Python 1基础语法二(标识符、关键字、变量和字符串)
一.标识符 标识符就是程序员自己命名的变量名.名字需要有见名知义的效果,不要随意起名 :比如 a=1 a是个变量,a这个变量名属于标识符 1 company = '小米 2 employeeNum = ...
- Python 基础语法(二)
Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...
- web前端学习python之第一章_基础语法(二)
web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- Python入门基础学习 二
Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...
- 第4天 | 12天搞定Python,基础语法(下)
为了方便你的学习,减轻负重,我特意将基础语法分成上下两部分.希望你喜欢这种方式,如果不喜欢,你可以跟我说,反正我是不会改的,哈哈~~. 如果上部分,你还没看的话,先去看<第4天 | 12天搞定P ...
- Python的基础语法(一)
0. 前言 最近正在重新整理Python的基础知识,以便更好地学习新知识.这一部分主要是讲述Python基础语法的演示.下面的语法都是基于Python3的语法. 1. 注释 注释:Python的注释方 ...
- Python 及其基础语法
重新开始玩 Python,打算就是学完实验楼的"Python3 简明教程",然后就可以玩点小项目,先前学了点 Python2 就不管它啦. 以上. 认识 Python Python ...
- Python语言基础-语法特点、保留字与标识符、变量、基本数据类型、运算符、基本输入输出、Python2.X与Python3.X区别
Python语言基础 1.Python语法特点 注释: 单行注释:# #注释单行注释分为两种情况,例:第一种#用于计算bim数值bim=weight/(height*height)第二种:bim=we ...
- 12天搞定Python,基础语法(上)
不知你是否见过建楼房的过程,没有的话,找个时间去瞧一瞧,看一看.看过之后,你就会明白.建楼房,只有打好地基之后,才能在砌墙,建的楼层越高,打的地基就越深. 学编程也一样,要想得心应手的应用,得先打好地 ...
随机推荐
- sourcetree 跳过首次登录
定位到用户缓存数据目录:(需要在文件夹选项中 开启不隐藏文件夹和不隐藏文件扩展名) 一般为: C:\Users\{用户名}\AppData\Local\Atlassian 进入sourcetree目录 ...
- CSS3网页动画
CSS3网页动画 概要:CSS3变形是一些效果的集合 如:平移.旋转.缩放.倾斜效果 每个效果都可以称为变形(transform)他们可以分别操控元素发生平移.旋转.缩放.倾斜等变化. 网页中能够实现 ...
- POJ 3140.Contestants Division 基础树形dp
Contestants Division Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10704 Accepted: ...
- NC 63凭证辅助相关表
1:通过公司主键(pk_org)在AccChartVO(表:bd_accchart)找:pk_accchart 2:通过科目编码和pk_accchart在AccAsoaVO(表:bd_accasoa) ...
- 2019西湖论剑web wp
发在正文前 这应该是自己在安全圈摸爬滚打两年多以来第一次正规的ctf比赛.没解出flag,没截图,只提供了一些思路. 遥想往昔,初入大学,带着对PT的向往,一个人穿行在幽暗的图书馆,翻阅啃读一本本安全 ...
- 使用Python完成排序(快排法、归并法)
class Sort(object): def quick_sort(self, ls): self.quick_sort_helper(ls, 0, len(ls) - 1) return ls d ...
- clouderamanager安装
下载地址 http://archive.cloudera.com/cm5/cm/5/ 安装 先安装manager,再安装cdh 待续
- 剑指offer PART 2
剑指offer PART 2 书点击自取 提取码: njku 标签(空格分隔): 笔记 C++知识点: 1.面向对象的特性 2.构造函数 3.析构函数 4.动态绑定 5.常用的设计模式 6.UML图 ...
- 小白的CTF学习之路7——内存与硬盘
前天去网吧跟朋友包宿,导致昨天一整天都报废,今天早上研究了一下nethunter导致手机成功变砖,感冒不停地咳嗽,这些理由应该足够我前两天拖更了吧,下面开始正题 磁盘学习路线 虚拟缓存 虚拟内存 节约 ...
- s6-3 通信模型
传输层的作用范围 通信5元组 一些已分配的知名端口 三元组 协议. 本地端点. 远方端点 五元组 协议. 本地IP地址.本地端口号. 远端IP地址.远端端口号 通信5元组 源IP 源端口 目的I ...