第二章 Python语言要素

二、Python语言要素

2.1 代码规范

注释

  • 单行注释:#开头
  •   # 第一个注释
      print (“Hello, Python!”)  # 第二个注释
    
  • 多行注释: '''"""包裹起来
  •   '''
        print(value, ..., sep=' ', end='\n',file=sys.stdout, flush=False)
      '''
    

缩进

  • Python代码的缩进可以通过Tab键控制
  • Python3不允许混合使用Tab和空格
  • 正确:heavy_check_mark::
    • if True:
          print ("True")
      else:
          print ("False”)
          print ("False”)
      
  • 错误:x::
    • if True:
        print ("True")
      else:
         print ("False")
       print (”hello”)
      

2.2 标识符和关键字

标识符

  • 定义:变量、函数、类、模块和其他对象的名称
  • 规范:
    • 由数字、字母和下划线组成
    • 不能用数字开头,不能包含空格
    • 不能使用关键字
      • 合法:heavy_check_mark::name, message_1, _name_zhangsan
      • 非法:x::name_?, name-1, greeting message, for, if
    • 区分大小写,Kirk、kirk不是同一个标识符

关键字

  • 定义:预先定义好的特殊标识符,不能用于变量命名
  • python中的关键字:36个
  • # ipynb 文件中运行
    import keyword
    keyword.kwlist
    

    ['False', 'None', 'True', 'peg_parser', - 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

2.3 变量和数据类型

变量

  • 是一种存储数据的载体,变量的值可以被读取和修改。
  • 创建变量
    • # 创建变量x,y并赋值
      x = 10
      y = 'Bill'
      
  • 变量命名
    • 不要将关键字函数名,例如:不要将变量命名为print
    • 变量名应既简短又具有描述性。例如: name 好于 nstudent_name 好于 s_n, name_length 好于 length_of_person_name

数据类型

  • python数据类型分为基础的数字类型和比较复杂的组合类型
  • python数据类型:
    • 字符串类型-str   'Python123¥' "Python123¥" '''Python s1 ~(())'''
    • 列表类型-list   [1, 2, 'hello']
    • 元组类型-tuple   (1, 2, 'hello'])
    • 集合类型-set   {'apple', 'orange', 1}
    • 字典类型-dic  {'fruit':'apple', 'quantity': 10}
  • 数字类型
    • 整数-int,- 浮点数-float,复数-complex
    • 布尔-bool
      • True、False表示布尔值(请注意大小写)
      • 布尔运算结果(例如3 < 5会产生布尔值True,而2 == 1会产生布尔值False)
  • 字符串型-str
    • ' 或 " 括起来的任意文本,例如'hello'和"hello"
    • ''' 或 """ 括起来的多行文本
  • 列表-list
    • 是一种有序和可更改的集合。允许重复的成员
    • []创建列表,列表中的元素以逗号分隔
    • items = []  # 空列表
      heroes=['邱少云','黄继光','董存瑞','雷锋']
      
  • 元组-tuple
    • 是一种有序且不可更改的集合。允许重复的成员。
    • 使用()创建元组,元组中的元素以逗号分隔
    • changchun=("长春市", "副省级", "吉林", 20532)  # 面积平方公里
      
  • 集合-set
    • 保存任意数量、任意类型的元素
    • 使用{}创建,集合中的元素无序且唯一
    • items = {} #空集合
      basket = {'apple', 'orange', 'pear', 'banana'}
      
  • 字典-dict
    • 字典中的元素是键(Key):值(Value)形式的键值对
    • 键不能重复。使用{}创建字典,字典中的各元素以逗号分隔
    • student = {'Name': '张三', 'Age': 7, 'Class': '542109'}
      

2.4 数字类型

整数

  • 整数表示方式
    • 二进制(如 0b100,换算成十进制是4),0b 或 0B 开头
    • 八进制(如 0o100,换算成十进制是64),0o 或 0O 开头
    • 十进制(如 100
    • 十六进制(如 0x100,换算成十进制是256),0x 或 0X 开头
  • 串到整数的转换
    •   # 结果都是整数254
        num1 = int('254') # 字符串转换为十进制整数
        num2 = int('0xfe',base=0) # 十六进制转换为十进制整数
        num3 = int('0B11111110',base=0) # 二进制转换为十进制整数
        num4 = int('0o367',base=0) # 八进制转换为十进制整数
      
  • 整数到串的转换
    •   num_str = str(254) # 结果:'254'
        hex_str = hex(254) # 结果:'0xfe'
        oct_str = oct(254) # 结果:'0o376'
        bin_str = bin(254) # 结果:'0b11111110'
      
  • 整数的运算
    • + , -, *, /, **(乘方), %(取模 - 返回除法的余数), //(取整除 - 返回商的整数部分,向下取整)
    • 支持运算次序(优先级),可使用()来修改运算次序
    •   a = 321
        b = 7
        result1 = a + b  # 328
        result2 = a - b  # 314
        result3 = a * b  # 2247
        result4 = a / b  # 45.8571
        result5 = a // b # 45
        result6 = a % b  # 6
        result7 = a**b  #  351184408905832640
      
  • 大整数的数值分组
    •   universe_age=14_000_000_000
        print(universe_age)  # 14000000000
      

浮点数

  • 表示方式
    • 数学写法(如123.456
    • 科学计数法(如1.23456e22.12E-6
  • 浮点数的运算
    •   a = 3.1415
        b = 0.7
        result1 = a + b  # 3.8415
        result2 = a - b  # 2.4415000000000004
        result3 = a * b  # 2.19905
        result4 = a / b  # 4.487857142857143
        result5 = a // b  # 4.0
        result6 = a % b  # 0.34150000000000036
        result7 = a**b  #  2.228414341667732
      
    • 浮点数运算结果包含的小数位数可能是不确定的
    • 任意两个数相除时,结果总是浮点数,如4 / 2,结果为2.0
    • 操作数有浮点数,结果总是浮点数

布尔型

  • 取值 True 和 False
  • 布尔类型可以当做整数来对待(在实际应用中不要这么用)
    • True 相当于整数值 1
    • False 相当于整数值 0
  • 所有的对象都可以进行真假值的测试,包括字符串、元组、列表、字典、对象等
    • ''、""、''''''、""""""、0、()、[]、{}、None、0.0、0.0+0.0j、False 为 False
    • 其他都为 True

复数类型

  • 如3+5j,跟数学上的复数表示一样,唯一不同的是虚部的i换成了j

类型之间的转换

  • int(x,base):将一个数值或字符串转换成整数,可以指定进制。
  • float(x):将一个字符串转换成浮点数
  • str(x):将指定的对象转换成字符串形式,可以指定编码
  • complex(x):将指定的对象转换成复数
  • chr():将整数转换成该编码对应的字符串(一个字符)
  • ord():将字符串(一个字符)转换成对应的编码(整数)

2.4 输入输出

输入

  •   input (__prompt: object = ..., /) -> str
      # `__prompt`表示函数的参数,用于设置接收用户输入时的`提示信息`
      # 返回结果为 str
    

输出

  •   print (value,...,sep ='',end ='\n',file = sys.stdout,flush = False)
      # value, ...:表示输出的对象。输出多个对象时,对象之间需要用分隔符 `,` 分隔。
      # file:类文件对象(stream),输出目标; 默认为当前的sys.stdout(屏幕)。
      # sep:在值之间插入的字符串,默认为空格。
      # end:在最后一个值后附加的字符串,默认为换行符。
      # flush:是否强制刷新流。
    

2.5 运算符的使用

算数运算符

  •   a, b = 10, 3
      result = a + b  # 加 - 两个对象相加                               结果 13
      result = a - b  # 减 - 得到负数或是一个数减去另一个数               结果 7
      result = a * b  # 乘 - 两个数相乘或是返回一个被重复若干次的字符串    结果 30
      result = b / a  # 除 - x除以y                                    结果 0.3
      result = a % b  # 取模 - 返回除法的余数                            结果 1
      result = a**b  # 幂 - 返回x的y次幂                                结果 1000
      result = a // b  # 取整除 - 返回商的整数部分(向下取整)            结果 3  
    

比较运算符

  • 返回结果为布尔值
  •   a, b = 10, 20
      flag = a == b  #   等于 - 比较对象是否相等            返回 `False`
      flag = a != b  #   不等于 - 比较两个对象是否不相等    返回 `True`
      flag = a > b  #  大于 - 返回x是否大于y              返回 `False`
      flag = a < b  #   小于 - 返回x是否小于y。            返回 `True`
      flag = a >= b  #   大于等于 - 返回x是否大于等于y。    返回 `False`
      flag = a <= b  #   小于等于 - 返回x是否小于等于y。    返回 `True`
    

赋值运算符

  • 从右向左进行赋值
  •   a, b = 10, 20
      c = a + b  #  简单的赋值运算符   将 a + b 的运算结果赋值为 c
      c += a  #  加法赋值运算符      等效于 c = c + a
      c -= a  #  减法赋值运算符      等效于 c = c - a
      c *= a  #  乘法赋值运算符      等效于 c = c * a
      c /= a  #  除法赋值运算符      等效于 c = c / a
      c %= a  #  取模赋值运算符      等效于 c = c % a
      c **= a  #  幂赋值运算符        等效于 c = c ** a
      c //= a  #  取整除赋值运算符    等效于 c = c // a   
    

逻辑运算符

  • 运算结果为布尔类型
  •   x, y = 10, 20
      c = x and y  # 布尔"与" 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。结果:20
      c = x or y  #  布尔"或" 如果 x 是非 0,它返回 x 的计算值,否则它返回 y 的计算值。 结果:10
      c = not (x and y)  # 布尔"非" 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。结果:False
    

成员运算符

  • 成员运算符,测试字符串,列表或元组是否包含某个值
  •   a = 2
      ls = [1, 2, 3, 4, 5]
      flag1 = a in ls  # 如果a在ls中返回 True,否则返回 False。结果 True
      flag2 = a not in ls  # 如果不在ls中 True,否则返回 False。结果 False
    

位运算符

  • 位运算符是把数字按二进制计算
  •   a, b = 0b00111100, 0b00001101  # 60, 13
      c = a & b  #  按位与运算符:a,b 相应位都为1,则该位的结果为1,否则为0, 结果 12 ,二进制解释: 0000 1100
      c = a | b  #  按位或运算符:a,b 对应的位有一个为1时,结果位就为1。结果 61 ,二进制解释: 0011 1101
      c = a ^ b  #  按位异或运算符:a,b 对应的二进位相异时,结果为1, 结果 49 ,二进制解释: 0011 0001
      c = ~a  #  按位取反运算符:a 的每个二进制位取反,即把1变为0,把0变为1,结果 -61 ,二进制解释: 1100 0011
      c = a << 2  #  左移动运算符:a 的各二进位全部左移2位,高位丢弃,低位补0。结果 240 ,二进制解释: 1111 0000
      c = a >> 2  #  右移动运算符:a 的各二进位全部右移2位,结果 15 ,二进制解释: 0000 1111       
    

身份运算符

  • 身份运算符用于比较两个对象的存储单元
  •   a, b = 10, 20
      flag1 = a is b  # 是判断两个标识符是不是引用自一个对象,结果:False
      flag2 = a is not b  #判断两个标识符是不是引用自不同对象,结果:True
      a = b
      flag3 = a is b # 结果:True
    

运算符的优先级

  • 从高到低排列
    • ** 指数 (最高优先级)
    • ~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
    • * / % // 乘,除,取模和取整除
    • + - 加法减法
    • >> << 右移,左移运算符
    • & 位 'AND'
    • ^ ¦ 位运算符
    • <= < > >= 比较运算符
    • == != 等于运算符
    • = %= /= //= -= += *= **= 赋值运算符
    • is is not 身份运算符
    • in not in 成员运算符
    • not and or 逻辑运算符(最低优先级)
  • 说明:在实际开发中,如果搞不清楚优先级可以使用括号来确保运算的执行顺序。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容