python学习笔记DAY02(语法、数据类型)

python语法

这是我个人的学习笔记,都依赖于(egon老师)的分享,以下是老师博客的原地址:

https://www.cnblogs.com/xiaoyuanqujing/articles/11640888.html

我们已经了解过了关于计算机和编程语言的基础知识,接下来正式进入python语法的学习

一、变量

  • 什么是变量

    ​ 就是可以记录,一个有变化的事物的状态。

    ​ 也就是说定义一个量,而它之后的值是可变的。这个量称之为变量。

  • 变量的使用

    ​ 在记录一个需要变化的量时,如年龄,身高,体重,工资,等就会用到变量。

  • 变量的定义

    ​ age = 18 (解释器执行到这个变量会在内存空间申请一块内存地址---把变量值放进去---然后把这个内存地址返回给变量名)

    ​ 变量名命名,应该见名知意。只能是数字字母下划线的组合,第一个字符不能是数字,关键字不能为变量名。例如(new_student_name = "遥遥")推荐使用纯小写下划线。

  • 什么是常量

    ​ 在程序运行过程中不会改变的量为常量。(在程序中需要用到一些永远不会改变的量,如:身份证号,出生年月,圆周率等)就需要常量来表示。

  • 常量的使用

    ​ 在python中没有常量的固定语法,约定是变量名纯大写的时候,这个就是常量。值不可变。

二、基本数据类型

变量是为了存储数据,而数据又分为多种类型,我们接下来就认识一下他们吧

  • 数字类型

    • 整型:int,记录整数数据

    • 浮点型:float,记录小数点数据

  • 字符串类型:str,记录字符串数据,如 “ 名字” / ‘爱好’ / “”“ 多行 ”“” 等

  • 列表:list,记录一组有序的数据。方便根据索引存取

  • 字典:dict,记录一组形式为{key:value}的无序的值,根据key取值(key经常为字符串,因为字符串有描述功能)

  • 布尔:bool,记录真或者假(通常在判断时候会用到)

三、垃圾回收机制

​ 在我们定义使用变量的过程中,一旦变量被重新赋值,那么变量名就会指向新的值的内存地址,之前的值还在内存中占据这位置,但是已经不会再被使用了。这样一来就需要被删除掉来减轻内存的压力。但是程序上万行代码,找出全部已废弃的变量值,是不可能的任务。所以python解释器提供了垃圾自动回收机制。

  • 什么是垃圾回收机制

    ​ 垃圾回收机制,是python自带的一种机制,专门用来回收不可用的变量值说占用的内存空间。

  • 垃圾回收机制原理

1.引用计数:当变量值的这个内存地址被使用过一次,python的引用计数就会加一;相反就会减一(只要计数小于1,就是没有没使用,就会被回收)

2.标记清除:引用计数有个大BUG,容器对象都可以包含对其他对象的引用,所以可能产生循环引用,就是在栈区没有地址指向堆区的值的时候,值依然存在。标记清除查询所有堆区的内容是否有明确的地址指向栈区,如果没有就标记清除。

四、用户交互,运算符

程序与用户交互

为了让计算机与人进行交流,就需要程序与用户交互,也就是用户输入,程序输出。

  • 如何与用户交互?

用户输入:input() 接受用户输入,并且进行处理(如果输入内容为int类型,input接受的也是str需要转换)

程序输出:print()打印输出处理后的结果。(打印内容中添加 \n 表示换行 添加end = ","表示不换行以逗号隔开)

格式化输出:print("nihao {x:=<10}".format(x ="nida")) 输出内容左对齐,共输出字符10,不够用=号补充。(^上尖括号表示居中对齐)

基本运算符

  • 算术运算符:(+ - * / )(除/只保留小数)(除//只保留整数)(取余%)(10**3 10的三次方)大致与数学运算符一致。

  • 比较运算符:( < > <= >= == !=)大致与数学比较运算符一致

  • 赋值运算符

    • 增量赋值:(a +=1) 就是 a = a+1的意思
    • 链式赋值:a = b = c = 9 就是abc 全都指向一个内存地址
    • 交叉赋值:m,n = n,m 就是把自己的值赋给对方
    • 解压赋值:a,b,c,d = [10,20,30,40] 就是把列表中的10给a,20给b,30给c,40给d。

    如果解压赋值,只想取部分值,就可以把不想取的值用*_代替。

    (a,b,*_= [10,20,30,40] )就是取出10,20。

  • 逻辑运算符

    • and 两边的判断都为true,结果为true
    • or 两边有一边的结果为true,结果为true
    • and / or 混用 :在混用过程中的优先顺序为:not > and > or (在多重判断条件下,最好根据优先级用括号括起来,这样会让代码一目了然。)
  • 逻辑运算符

  • 成员运算符 :in/not in 判断一个字符是否在另一个大的字符串内。(也可以判断元素是否输入列表,key是否属于字典)

  • 身份运算符 :is:判断变量的身份id的时候,会用到is。比如:name is new_name 结果真/假。

五、流程控制

分支结构

​ 在正常运行代码过程中,是从上到下,从左到右依次运行的。但是如果有些代码块的运行首先要符合一些条件的话,这时候就用到(if-elif-else 判断)分支流程控制。

if 条件:

​ 要执行的代码 (if后的条件通过就执行这行 代码)

elif 条件:

​ 要执行的代码 (if后的条件不通过,但是通过了elif条件,就执行这行 代码)

else:

​ 要执行的代码 (以上所有条件不通过,就执行这行 代码)

循环结构

​ 如果在我们编写程序的过程中,有些动作需要重复多次,这时候就用到了(while/for 循环)流程控制。

  • while循环

    ​ while循环又称为条件循环,当条件为true的时候执行需要循环的代码,直到再次判断到首行条件为false时,停止循环。

备注:如果没有步长操作,而条件一直为真就是死循环。

    • while-break

      ​ 在while循环过程中,如果没有结束之前就需要结束掉循环,比如用户第一次就操作正确,那么就需要跳出循环的机制,如判断用户登录成功后,break跳出循环。

ps:如果当前循环是while嵌套循环,则退出每一层都需要一个break。另一种方法,把多层循环的条件设置为同一个变量,当需要跳出循环时,设置变量为false,即可跳出多层循环。还有一种粗暴方法,需要跳出循环时,直接exit(),跳出整个循环。

    • while-continue

      ​ continue跳出本次循环,直接进入下一次循环。

    • while-else

      ​ 在while循环后面,可以跟else语句,表示如果整个循环正常结束之后,需要输出的内容。比如:循环三次让用户输入账号密码,但是三次都输错了,没有进入其它代码块。那么这个循环就结束了,这是else就可以输出“三次输入错误,今天无法登录了”

备注:如果在循环过程过程中程序被break打断了,则不会执行else内的代码。

  • for循环

    ​ for循环又叫迭代循环,取值循环。主要特点在于遍历取值,取值方面for循环比while更加简洁方便。

如图:in后面的值就是要被遍历的对象,可以是字符串、列表、字典、集合、元组。而循环次数就取决于in后面对象包含的元素的个数。

备注:range相当于一个列表,for循环时定义range的长度,进行循环取值。(range(10) 表示:列表内的元素是1-9;range(1,8) 表示:列表内的元素是1-7;range(2,9,2) 表示:列表内的元素是2,4,6,8)第三个数为步长操作。

深浅拷贝

​ 在开发成需的过程中,需要复制一组数据的时候就会用到copy。具体分为两种:

  • 浅copy

如果被copy的原列表元素都为不可变类型,可以直接使用浅copy。(更换列表内的元素时,互不影响)

使用:list2 = list1.copy

备注:在浅copy时,只copy了第一层的内存地址。所以当第二层元素还是指向的原来的内存地址。所以当第二层元素改变的时候,新旧列表都会随之改变。

  • 深copy

如果被copy的原列表元素都为可变类型,必须使用深copy。(才能确保更换列表内的元素时,互不影响)

使用:import copy list2 = copy.deepcopy(list)

备注:在深copy时,除了第一层的内存地址。在之后遇到可变元素就会再复制一份内存地址,这样一来,当深层元素内容被改变时,新旧列表互不影响,彼此独立。

posted @ 2021-04-20 16:27  nida  阅读(91)  评论(0)    收藏  举报