2.Python 基础语法、数据类型和变量

简介: 2.Python 基础语法、数据类型和变量

f84f53389ced4537b25e14d00efbe266.png 1.语法基础

1.1 代码注释

单行注释单行注释可以出现在源代码中任意位置,如 # 注释内容;

多行注释:使用3个引号包含注释内容,注释一般位于程序的开头或者代码块的开头,用于对Python模块、类、函数等添加说明。

注:代码块主要包括程序结构(如分支结构、循环结构)、函数体、类结构、异常处理和上下文管理等。

''' 注释内容'''
"""
注释内容
"""

1.2 代码缩进

采用冒号+缩进

缩进可以使用空格键、Tab键表示,一个Tab键默认4个空格宽度,一般建议使用4个空格表示一个层级的缩进宽度。

'''
命令行:
    缩进代码块
    嵌套命令行:
        嵌套代码块:
        ......
    嵌套代码块结束
    ......
缩进代码块结束
'''
while True:                                  # 无限循环
    name = input('你叫什么名字?')             # 要求输入姓名
    if name:
        print(f'Hello {},欢迎学习Python。')    
        break                                # 结束循环
    else:                                    # name为空,没有输入则返回提示输入
        print(f'不要匿名哦!\n{"-"*50}')       
        continue                             # 返回继续询问

1.3 代码行

一行代码表示一条语句,这里的行是逻辑行,而非物理行。

  • 物理行:通过回车符(CR)或者换行符(LF)终止,在嵌入式源代码中则通过’\n‘ 终止。
  • 逻辑行:表示一条语句,通过NEWWLINE(新行)形符终止。

一般情况下,一个物理行就是一个逻辑行。也可以多个物理行构成一个逻辑行,这样一条语句可以分成多行显示。

显示连接:在一个物理行的末尾添加续行符(\),并且续行符后面不能符加任何代码,必须直接换行,行内也不能包含任何注释,其中的缩进也没有任何语法意义。

隐式连接:在小括号()、中括号、大括号内包含多行代码,不需要添加续行符,将自动视为一个逻辑行,并且可以添加注释。

hi = ('Hello',  # 物理行1
      ',',      # 物理行2
      'Python') # 逻辑行
print(hi)       # 输出为 Hello,Python


如果多条相邻语句属于同一个代码块,可以合并物理行显示,语句之间用分号(;)分隔,一般不建议同一行内编写多条语句

while True:                                  
    name = input('你叫什么名字?')             
    if name:
        print(f'Hello {},欢迎学习Python。');break # 代码块并行展示
    else:                                    
        print(f'不要匿名哦!\n{"-"*50}');continue # 局部两条语句合并
        pass 

1.4 空字符和空行

空字符表示各种不可见字符,如空格、Tab 字符、换行符等。这些空字符在逻辑行的开头具有语法意义,表示缩进。在字符串中具有实际字符的含义。但是,在其他位置,空字符没有任何语义,不会被解析,主要作用是区分不同的形符。1个空字符和10 个空字符没有本质区别,都具有相同的作用:分隔两个形符。例如,abe 表示1个形符,而a b c表示3个形符。

空行表示一个只包含空格符、制表符、进纸符或者注释的逻辑行。空行将被 Python 解析器忽略,不被解析。空行的作用:分隔两段不同功能的代码块,便于代码阅读和维护。例如,函数体、类结构、类方法之问可以使用空行分隔,表示一段新代码的开始。

1.5 形符

形符是各种名称、符号、字符序列或抽象概念的统称,主要包括:标识符、关键字、保留字、运算符、分隔符、字面值、NEWLINE(新行)、IVDENT(缩进)和DEDENT(突出)

标识符就是各种有效的名称,如关键字、保留字、变量、类、函数、方法等。标识符的第一个字符是字母或下面线 (_),其余部分由字母、数字或下画线组成。标识符的长度没有限制,对大小写敏感。

关键字是 Python 预定义的、具有特殊功能的标识符。使用keyword模块的 kwlist 集合可以查看当能 Python 版本支持的关键字。如下代码可查看关键字。

import keyword
print(keyword.kwlist)


保留字以下画线开头或结尾,是包含特殊含义的标识符。

  • _*:开头包含单下画线,表示模块私有名称。不会被from module import *导入。
  • __*__:开头和结尾包含双下画线,表示Python 预定义名称,也称魔法变量或魔术方法。
  • __*:开头包含双下画线,表示类的私有名称,仅在当前类中使用,不能在类外访问,也不能够被继承。

运算符就是执行各种运算的符号,如十、一、*、/、**、//、%、@。

分隔符不执行远算,仅表示语法分隔的作用,如小括号()、中括号[]、 大括号{}、逗号(,)、冒号(、)、点字(.)、分号(;)、单引号(‘)、双引号(“)、井号(#)、反斜杠(\)等。

2.数据类型

所有数据都是由对象或对象间关系来表示的。每个对象都拥有3个基本特性:

  • 编号:ID省份标识。可以使用id(object)获取对象obj的id编号,编号为一组整型的数字。可以使用 id(a) == is(b) 或者 id(a) is id(b) 判断两个对象的编号是否相同。
  • 类型:类型决定对象所支持的操作,并定义了该类型对象可能的取值。可以使用type(object)查看。
  • 值:对象拥有的具体数据。值可以改变称可变对象,值不可改变称不可变对象。

a. 一个对象的可变性是有类型决定的。数字、字符串和元组是不可变的,而列表、字典和集合是可变的。

b.一个不可变容器对象如果包含对可变对象的引用,当后者的值改变时,前者的值也会改变。但是该容器仍属于不可变对象,因为它所包含的对象集是不会改变的。不可变并不严格等于值不能改变。


Python 内置类型可以分为2类,具体如下:


标淮数据类型:如数字(int、 float、 complex)、序列(list、tuple、range)、文本序列 (str)、二进制序列 (bytes、 bytearray、memoryview)、集合(set、frozenset)、映射(dict)、迭代器、上下文管理器等。

其他内建类型:包括模块、类和实例、函数、方法、类型(type)、空对象(None)、省略符对象、代码对象、布尔值、未实现对象、内部类型等。其中,内部类型包括栈帧对象、回湖对象、切片对象。

使用isinstance(object, type)函数能够检测一个值是否为指定类型的实例。参数 object 为一个对象,参数type为类型名(如int),或者是类型名的列表,如(int,int,float)。返回值为布尔值。

print(isinstance(1,int))                # 输出为 True
print(isinstance(1,str))                # 输出为 False
print(isinstance(1,(str,int,float)))    # 输出为 True
print(isinstance(1,(str,list,float)))   # 输出为 False

type(object)函数可以返回对象的类型。

print(type(1))                          # 输出为 <class 'int'>
print(type(1.0))                        # 输出为 <class 'float'>
print(type('1'))                        # 输出为 <class 'str'>
print(type(True))                       # 输出为 <class 'bool'>
print(type([1]))                        # 输出为 <class 'list'>
print(type(range(1,2)))                 # 输出为 <class 'range'>
print(type((1,1)))                      # 输出为 <class 'tuple'>
print(type({1:1}))                      # 输出为 <class 'dict'>
print(type({1,2}))                      # 输出为 <class 'set'>

注:如果判断两个类型是否相同,推荐使用isinstance()函数。

class A:
    pass
class B(A):
    pass
print(isinstance(A(),A))                # 输出为 True
print(type(A()) == A)                   # 输出为 True
print(isinstance(B(),A))                # 输出为 True
print(type(B()) == A)                   # 输出为 False,但类型是一样的

3.变量

交量名字是有效标识行,第一个字行必须是字母或下画线(_),其余字符可以由字母、数字或下画线组成,并严格区分大小写。

变量名没有长度限制,但是不能使用Python关键字和保留字,也不建议使用Python内置函数,这样会导致内置函数被覆盖。

123_abc = 10            # 变量命名不合法,须以字母或下画线(_)
if = 10                 # if 是关键字,不能使用关键字命名

变量命名的一般方法是驼峰式命名法。包括如下两种形式。


小驼峰式命名法:第一个单词以小写字母开始,第二个单词的首字母大写。例如:firstName;

大驼峰式命名法:每一个单词的首字母都采用大写字母。例如:FirstName;

也可以使用下画线(_)连接多个单词,如 first_name;

在Python 中,不需要声明变量,也不需要定义变量类型,但是变量在使用前必须要赋值,然后才能使用。使用赋值运算符,直接把对象赋值给变量就可以定义一个变量。


链式赋值:同时给多个变量赋值;

解包赋值: 将容器的元素逐一赋值给多个元素。

# 链式赋值
a = b = c = "abc"           # a、b、b都为'abe'
# 解包赋值
a,b,c = 1,2,3               # 多变量赋值,a、b、c分别为1、2、3,其中1,2,3等价于(1,2,3)
a,b,c = (1,2,3)             # 元组解包,a、b、c分别为1、2、3
a,b,c = [1,2,3]             # 列表解包,a、b、c分别为1、2、3
a,b,c = '123'               # 字符串解包,a、b、c分别为1、2、3
a,b,c = {"a":1,"b":2,"c":3} # 字典解包,a、b、c分别为'a'、'b'、'c',只把对应键取出

注:如果遇到左边变量个数小于右边可选代对象中元素的个数时,可以在某个变量前添加星号前缀;

*a,b,c = [1,2,3,4]          # a、b、c分别为 [1,2]、3、4]
a,*b,c = [1,2,3,4]          # a、b、c分别为 1、[2,3],4]
a,b,*c = [1,2,3,4]          # a、b、c分别为 1、2、[3,4]
a,b,*c = [1,2]              # a、b、c分别为 1、2、[]

4.数据类型-数字

数字类型有3种:整数(int)、浮点数(float)、和复数(complex),另外,布尔值(bool,0/1)也属于整数的子类型。

创建数字有两种方法:数字字面值、调用内置函数。

  • 数字字面值;
# a.不能修饰的整数字面值,包括二进制、八进制、十进制和十六进制;
n = 0b101       # 二进制数字,以0b开头
print(n)        # 输出十进制数字 5
n = 0o23        # 八进制数字,以0o开头
print(n)        # 输出十进制数字 19
n = 14          # 十进制数字,不能以0开头,中间可以包含"_"符号,表示对数字进行分组
print(n)        # 输出十进制数字 14
n = 0x23        # 十六进制数字,以0x开头
print(n)        # 输出十进制数字 35
# b.包含小数点或幂运算的数学字面值会生成符点数;
n = 3.14.       # 标准浮点数
n = 3.14_15_93  # 分组浮点数
n = 3.14e2      # 指数浮点数
# c.在数字学面值末尾加'j'或'J'生成虚数,构成复数。
a = 1.56+1.2j   # 复数
print(a.real)   # 输出复数实部 1.56
print(a.imag)   # 输出复数虚部 1.2
  • 调用内置函数。
int([x])        # x 为数字,则直接返回数字表示的整数对象。如果没有传递参数,则返回0
int(10.9)       # 输出 10
int(x,base=10)  # x 不是数字,或者设置base参数,则x必须是字符串、bytes(字节串)、bytearray(字节数组,表示进制为base的整数字面值)
int('0xa',16)   # 输出 10
int('1010',2)   # 输出 10
float([x])      # floatnumber是浮点数的字符串形式,字母大小写都可以,如”inf'、“Inf”、"INFINITY"和"iNfiNity都可以表示正无穷大
float('-12345\n') # 输出 -12345
float('-infinity') # 输出 -inf
complex([real[,imag]]) # 可以将一个字符串或数字转换为复数,real可以是整数、浮点数或字符串,imag可以是整数或浮点数
complex('1)     # 输出 1 + 0j
complex('1.2','2.3') # 输出 1.2 + 2.3j
hex(x)          # 能够将一个整数转换为十六进制字符串
bin(x)          # 能够将一个整数转换二进制字符串
oct(x)          # 能够将一个整数转换八进制字符串
str(object='')  # 可以把任意类型的对象转换为字符串
chr(x)          # 能够将一个整数转换 Unicode 字符,参数x可以是十进制或十六进制形式的数字,如 chr(0x30)、chr(90)
ord(x)          # 能够将一个字符转换为整数值,参数x是一个 Unicode 编码的字符,返回对应的十进制整数
bool([x])       # 将任意类型转换为布尔值


f84f53389ced4537b25e14d00efbe266.png

相关文章
|
4天前
|
数据安全/隐私保护 Python
Python以及基础语法保姆级教程(超详细)-3
Python以及基础语法保姆级教程(超详细)
|
4天前
|
存储 Python 容器
Python以及基础语法保姆级教程(超详细)-2
Python以及基础语法保姆级教程(超详细)
|
2天前
|
存储 安全 Java
在Python中,引用和赋值机制是理解变量和数据对象之间关系的关键
【6月更文挑战第16天】Python变量是对象引用,不存储数据,指向内存中的对象。赋值`=`创建引用,不复制对象。`b = a`时,a和b指向同一对象。引用计数管理对象生命周期,垃圾回收在引用数为0时回收对象。理解这些机制对优化内存使用关键。
23 7
|
3天前
|
Python 存储 数据处理
【Python数据类型的奥秘】:构建程序基石,驾驭信息之海
【Python数据类型的奥秘】:构建程序基石,驾驭信息之海
|
4天前
|
机器学习/深度学习 Linux 开发者
Python以及基础语法保姆级教程(超详细)-1
Python以及基础语法保姆级教程(超详细)
|
11天前
|
存储 Python
【Python学习篇】Python基础入门学习——Python基础语法(二)
【Python学习篇】Python基础入门学习——Python基础语法(二)
19 1
|
11天前
|
算法 大数据 开发者
深入理解 Python3 函数:从基础语法到高级应用
深入理解 Python3 函数:从基础语法到高级应用
|
1月前
|
存储 开发者 索引
python怎么判断变量的数据类型
python怎么判断变量的数据类型
32 0
|
1月前
|
存储 Java Python
python变量、常量、数据类型
python变量、常量、数据类型
|
24天前
|
存储 Python
Python中的变量与数据类型详解
Python中的变量与数据类型详解
103 4