第二章 - Python 基础语法

基本语法

  • 注释 —— # 标注的文本

  • 数字
    • 整数,不区分long和int

      • 进制0xa、0o10、0b10
      • bool,2个值True、False
    • 浮点数
      • 1.2、3.1415、-0.12,1.46e9等价于1.46*109
    • 复数,1+2j
  • 字符串
    • 使用 ' " 单双引号引用的字符的序列
    • '''和""" 单双三引号,可以跨行、可以在其中自由的使用单双引号
    • 在字符串前面加上r或者R前缀,表示该字符串不做特殊的处理
  • 转义序列
    • \\ \t \r \n \' \"
    • 前缀r,把里面的所有字符当普通字符对待
  • 缩进
    • 未使用C等语言的花括号,而是采用缩进的方式表示层次关系
    • 约定使用4个空格缩进
  • 续行
    • 在行尾使用
    • 如果使用各种括号,认为括号内是一个整体,内部跨行不用
  • 标识符
    1. 一个名字,用来指代一个值
    2. 只能字母、下划线和数字
    3. 只能以字母或下划线开头
    4. 不能是python的关键字,例如def、class就不能作为标识符
    5. Python是大小写敏感的
  • 约定:
    • 不允许使用中文
    • 不允许使用歧义单词,例如class_
    • 在python中不要随便使用下划线开头的表示符
  • 常量
    • 一旦赋值就不能改变值的标识符
    • python中无法定义常量
  • 字面常量
    • 一个单独的量,例如 12、"abc" 、'2341356514.03e-9'
  • 变量
    • 赋值后,可以改变值的标识符

Python的语言类型

  • Python是动态语言、强类型语言

  • 静态编译语言
    • 实现声明变量类型,类型不能再改变
    • 编译时检查
  • 动态编译语言
    • 不用事先声明类型,随时可以赋值为其他类型
    • 编程时不知道是什么类型,很难推断
  • 强类型语言
    • 不同类型之间操作,必须先强制类型转换为同一类型。print('a'+1)
  • 弱类型语言
    • 不同类型间可以操作,自动隐式转换,JavaScript中console.log(1+'a')

运算符 Operator

  • 算数运算符

    • + - * / % **
    • 自然除/结果是浮点数,整除//。注:2.x中/和//都是整除
  • 位运算符
    • & | ~ ^ << >>
    • 常用方式:乘除2的倍数,32 // 4相当于 32 >> 2
    • 12,0xc,0o14,0b1100
      • ~12等于多少,为什么

原码、反码、补码,负数表示法

  • 原码

    • 5 => 0b101,1 => 0b1 ,-1 => -0b1, bin(-1)
  • 反码
    • 正数的反码与原码相同;负数的反码符号位不变其余按位取反
  • 补码
    • 正数的补码与原码相同;负数的补码符号位不变其余按位取反后+1
      有符号数才用补码表示
  • 负数表示法
    • 数字电路的CPU中的运算器实现了加法器,但是没有减法器,减法是转换成加法
    • 负数在计算机中使用补码存储,-1的补码为1111 1111
    • 5-1 => 5+(-1)直觉上是0b101-0b1,其实计算机中是0b101+0b11111111,溢出位舍弃
    • ~12为什么是-13?
    • 10^9 等于? 10^-9等于?为什么

     5 的补码 0000 0101
     -1 的原码 1000 0001
     -1 的补码 1111 1111 (0xff)
     5-1得 0000 0100

     12 的补码 0000 1100
     ~12 是 1111 0011
     怎么从补码得到原码?
     与得到补码是一样的,最高位不变,其他位取反加一,即补码的补码就是原码
     1000 1101 (即-13)

  • 比较运算符

    • == != > < >= <=
    • 返回一个bool值
    • 1 < '1'   报错       1 == '1'   False
    • == 是可以不同类型比较的,除非 大于、小于等做类型重载,不然是不能比较的
    • 链式比较操作符
      • 4>3>2       4>mynumber>=1
  • 逻辑运算符
    • 与或非 and or not
    • 短路运算符
      • and 如果第一个表达式为False,后面就没有必要计算了,这个逻辑表达式一定是False
      • or 如果第一个表达式True,后面没有必要计算了,这个逻辑表达式一定是True
  • 赋值运算符
    • a = min(3,5)
    • += -= *= /= %= 等
    • x = y = z = 10
      • 尽量少用连等,因为如果右边是个引用就麻烦了
  • 成员运算符
    • in、not in
  • 身份运算符
    • is 、is not

运算符优先级(由高到低)

运算符 描述
'expr' 字符串转换
{key:expr} 字典
[expr1, expr2, ...] 列表
(expr1, expr2, ...) 元组
function(expr, ...) 函数调用
x[index:index] 切片
x[index] 下标索引值
x.attribute 属性引用
~x 按位取反
+x, -x 正,负
x**y
x*y, x/y, x%y, 乘法,除,取模
x+y, x-y 加,减
x << y, x >> y 移位
x&y 按位与
x^y 按位异或
x|y 按位或
x<y, x<=y , x==y, x!=y, x>=y, x>y 比较
x is y , x is not y 等同测试
x in y, x not in y 成员测试
not x 逻辑否
x and y 逻辑与
x or y 逻辑或
lambda arg, ... : expr Lambda 匿名函数
  • 算数运算符 > 位运算符 > 身份运算符 > 成员运算符 > 逻辑运算符 > 赋值运算符

    • 位运算符也可以看成算术运算
  • 记不住,用括号

  • 长表达式,多用括号,易懂、易读

表达式 Expression

  • 由数字、符号、括号、变量等的组合

    • 算数表达式
    • 逻辑表达式
    • 赋值表达式
      • Python中,赋值即定义,如果一个变量已经定义,赋值相当于重新定义

内存管理

  • 变量无须事先声明,也不需要指定类型

    • 动态语言的特性
  • 编程中一般无须关心变量的存亡,也不用关心内存的管理

  • python使用引用计数记录所有对象的引用数
    • 当对象引用数变为0,它就可以被 垃圾回收GC
    • 计数增加:
      • 赋值给其它变量就增加引用计数,例如x=3;y=x
    • 计数减少:
      • 函数运行结束时,局部变量就会被自动销毁,对象引用计数减少
      • 变量被赋值给其它对象。例如x=3;y=x;x=4
  • 有关性能的时候,就需要考虑变量的引用问题,但是该释放内存,还是尽量不释放内存,看需求

程序控制

  • 顺序

    • 按照先后顺序一条条执行
    • 例如,先洗手,再吃饭,再洗碗
  • 分支
    • 根据不同的情况判断,条件满足执行某条件下的语句
    • 例如,先洗手,如果饭没有做好,玩游戏,如果饭做好了,就吃饭,如果饭都没有做,叫外卖
  • 循环
    • 条件满足就反复执行,不满足就不执行或不再执行
    • 例如,先洗手,看饭好了没有,没有好,一会来看一次是否好了,一会儿来看一次,直到饭好了,才可是吃饭。这里循环的条件是饭没有好,饭没有好,就循环的来看饭好了没有

单分支结构

  • if语句

    • if condition:

      • 代码块
    • condition必须是一个bool类型,这个地方有一个隐式转换bool(condition)
    • if 1<2:
          print('1 less than 2')
  • 代码块
    • 类似于if语句的冒号后面的就是一个语句块
    • 在if、for、def、class等

真值表

对象/常量
""
"string"
0
>=1
<=-1
()空元组
[]空列表
{}空字典
None
  • False等价布尔值,相当于bool(value)

    • 空集合

      • 空字符串
      • 空字典
      • 空列表
      • 空元祖
    • None对象
    • 0

多分支结构

  • if...elif...else语句
        if condition1:
            代码块1
        elif condition2:
            代码块2
        elif condition3:
            代码块3
        ......
        else:
            代码块

  • 举例
        a = 5
        if a<0:
            print('negative')
        elif a==0:
            print('zero')
        else:
            print('positive')

分支嵌套

  • 举例
        score = 80
         if score<0:
            print('wrong')
        else:
            if score==0:
                print('egg')
            elif score <= 100:
                print('right')
            else:
                print('too big')

  • 嵌套结构,可以是分支、循环的嵌套

  • 可以互相嵌套多层

  • 练习:给定一个不超过5位的正整数,判断其有几位
    • 使用 input 函数,input返回的是字符串
    • 如果位数多的话可以用折半
    • num = 8
      if (num /= 10) == 0:      为什么这里报错
          print('1位数')

循环——while语句

  • 语法
        while condition:
            block

    • 当条件满足即condition为True,进入循环体,执行block
  • 举例
        flag=10
        while flag:
            print(flag)
            flag -= 1

    • 执行结果是什么?为什么?
    • 如果flag=-10可以吗?如何改造?

循环——for语句*

  • 语法

    • for element in iteratable:
              block
    • 当可迭代对象中有元素可以迭代,进入循环体,执行block
  • range函数

  • 举例:打印1~10
        for i in range(10):
            print(i+1)

    • 执行结果是什么?为什么?
    • 如果想倒序打印呢

循环 continue语句

  • 中断当前循环的当次执行,继续下一次循环

  • 举例:计算10以内的偶数(for循环)
        for i in range(10):
            if not i%2:      # i%2==0这么写也行
                print(i)
  • 还有其它的实现吗?

    for i in range(0,10,2):
        print(i)

    for i in range(0,10):
        if i & 1:     # 或用 i%2 表示奇数就continue
            continue
        print(i)

循环 break语句

  • 终止当前循环
  • 举例:计算1000以内的被7整除的前20个数(for循环)
        count = 0
        for i in range(0,1000,7):
            print(i)
            count += 1
            if count >= 20:
                break

循环 continue、break语句

  • 总结

    • continue和break是循环的控制语句,只影响当前循环,包括while、for循环
    • 如果循环嵌套, continue和break也只影响语句所在的那一层循环
    • continue和break 不是跳出语句块,所以 if cond: break 不是跳出if,而是终止if外的break所在的循环
  • 练习:
    给定一个不超过5位的正整数,判断该数的位数,依次打印出个位、十位、百位、千位、万位的数字

循环 else子句

  • 语法
        while condition:
            block
        else:
            block
        for element in iteratable:
            block
        else:
            block

  • 如果循环正常的执行结束,就执行else子句;如果使用break终止,else子句不会执行

最后

本文的另外链接是:https://herodanny.github.io/python-magedu-2018-notes2.html

Python全栈-magedu-2018-笔记2的更多相关文章

  1. 自学Python全栈开发第一次笔记

           我已经跟着视频自学好几天Python全栈开发了,今天决定听老师的,开始写blog,听说大神都回来写blog来记录自己的成长. 我特别认真的跟着这个视频来学习,(他们开课前的保证书,我也写 ...

  2. Python全栈之jQuery笔记

    jQuery runnoob网址: http://www.runoob.com/jquery/jquery-tutorial.html jQuery API手册: http://www.runoob. ...

  3. python全栈开发之OS模块的总结

    OS模块 1. os.name()      获取当前的系统 2.os.getcwd      #获取当前的工作目录 import os cwd=os.getcwd() # dir=os.listdi ...

  4. python全栈开发中级班全程笔记(第二模块、第四章(三、re 正则表达式))

    python全栈开发笔记第二模块   第四章 :常用模块(第三部分) 一.正则表达式的作用与方法 正则表达式是什么呢?一个问题带来正则表达式的重要性和作用      有一个需求 : 从文件中读取所有联 ...

  5. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

  6. python全栈开发中级班全程笔记(第二模块、第三章)(员工信息增删改查作业讲解)

    python全栈开发中级班全程笔记 第三章:员工信息增删改查作业代码 作业要求: 员工增删改查表用代码实现一个简单的员工信息增删改查表需求: 1.支持模糊查询,(1.find name ,age fo ...

  7. 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】

    点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...

  8. 老男孩最新Python全栈开发视频教程(92天全)重点内容梳理笔记 看完就是全栈开发工程师

    为什么要写这个系列博客呢? 说来讽刺,91年生人的我,同龄人大多有一份事业,或者有一个家庭了.而我,念了次985大学,年少轻狂,在大学期间迷信创业,觉得大学里的许多课程如同吃翔一样学了几乎一辈子都用不 ...

  9. 学习笔记之Python全栈开发/人工智能公开课_腾讯课堂

    Python全栈开发/人工智能公开课_腾讯课堂 https://ke.qq.com/course/190378 https://github.com/haoran119/ke.qq.com.pytho ...

  10. python 全栈开发之路 day1

    python 全栈开发之路 day1   本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...

随机推荐

  1. shell ip变量加法运算

    #!/bin/bash for ip in `cat a.txt`;do a=`echo $ip|awk -F '.' '{print $1}'` b=`echo $ip|awk -F '.' '{p ...

  2. codeblocks更改颜色主题

    链接:http://www.cnblogs.com/wenbosheng/p/5899483.html

  3. Linux 之 rsyslog+mysql+LogAnalyzer 日志收集系统

     作者:邓聪聪 LogAnalyzer 是一个 syslog 和其他网络事件数据的 Web 前端工具,提供简单易用的日志浏览.搜索和基本分析以及图表显示 由于公司部分项目需求使用日志记录系统,随笔记录 ...

  4. 仿stl+函数模板

    #include<iostream> using namespace std; template<class T> void output(T begin, T end) { ...

  5. pl/sql学习(6): 引号/程序调试/列中的字符串合并/正则表达式

    有关自治事务的问题: https://www.cnblogs.com/princessd8251/p/4132649.html 我在plsql development学习中遇到的常见问题: (一) 引 ...

  6. HTML常用基础标签

    HTML常用基础标签 带有语义的标签 <em> </em> 强调 <strong> </strong> 比em强调级别高 <abbr> &l ...

  7. 安装 Docker <一>

    一.docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制, ...

  8. .net mvc 使用盛派Senparc.Weixin 上传图片接口

    首先获取微信签名,Controller代码: public ActionResult MutualHelpAdd() { var jssdkUiPackage = JSSDKHelper.GetJsS ...

  9. 使用EasyNetQ简化RabbitMQ操作

    关于具体的操作看查看官方文档:https://github.com/EasyNetQ/EasyNetQ 也可以参考中文翻译版本:http://www.cnblogs.com/HuangLiang/p/ ...

  10. 【数据库】MySql分割字符串

    上论坛时看到一个骨骼清奇的分割字符串算法. DROP TABLE IF EXISTS Tmp_AreaCode; CREATE TABLE Tmp_AreaCode( string ) )ENGINE ...