【跟小嘉学习Python 程序设计】第二章 Python编程基础概念

系列文章目录

【跟小嘉学习Python 程序设计】第一章 开发环境搭建
【跟小嘉学习Python 程序设计】第二章 Python编程基础概念

前言

今天讲解Python的简单概念、BNF语法规范、逻辑行和物理行、标识符和关键字、常见的命名方法、编码规范、基本数据类型简介。

一、简单的概念介绍

1.1、Alternate Implementations(其他实现)

首先Python是一种程序设计语言,根据其实现的不同,分为CPython,Jython,Python for .NET, IronPython,PyPy等
Cpython: 使用C语言编写实现的Python原始和最基本的实现。
Jython(旧称Jpython): 使用Java语言来实现的,这种实现可以作为Java应用程序的脚本语言,也可以用来创建使用Java类库的应用程序,还经常用于Java库创建测试。
Python for .NET: 它事实上是一个Cpython实现,但是它管理.NET应用和创建.NET库
IronPython: 它是一种在.NET和Mono上实现,
PyPy: 完全用Python编写来实现的解释器,它支持一些其他实现没有发现的高级特性,例如stackless支持和JIT编译器(即时编译器),该项目的目标之一是通过简化解释器来鼓励对语言本身进行实验

1.2、 Logic Lines(逻辑行) and Physical lines(物理行)

1.2.1、 逻辑行(Logic Lines)

逻辑行的结尾是由换行符表示的,语句不能跨越逻辑行边界,除非在语法允许换行的情况下(例如,在复合语句中)
逻辑行是由一条或多条物理行组成,它遵循显式或隐式的链接规则

逻辑行就是单个语句。

1.2.2、 物理行(Physical lines)

物理行就是由行尾序列结束的序列

案例:

i = 5
print(i)

以上案例就是,两个逻辑行,两个物理行

如果你要在一个物理行之中,使用多个逻辑行,那么需要使用分号来标明语句结束

i=5;print(i)

当然同时也支持多个物理行编写一个逻辑行,使用行连接符号(\),这称为显示行连接(Explicit line joining)。
例如:

 s = 'this is string.\
 This continues the string.
 '

逻辑行中使用了括号()、方括号[]、大括号{}的时候,不需要使用反斜杠(\)。这种称为隐式的行连接(Implicit line joining)

二、BNF(backus-Naur Form)语法规范

巴科斯范式(BNF:backus-Naur Form)规范是由John Backus 和Peter Naur 首先引入的用来描述计算机语言的符号集。现在几乎每一位编程语言书籍的作者都使用该规范来定义编程语言的语法规则。

在BNF中,双引号的字(“word”)代表字符本身,而 double_quote 用来代表双引号。

在双引号外的字(可能有下划线)代表语法部分

  • <> :内容包含的为必选项
  • [] :内容包含的为可选项(0次或1次)
  • {} :内容包含的为0次或多次
  • | :表示左右量变任选一,相当于or的意思
  • ::= :是“被定义为”的意思
  • () :分组的意思
  • + :前一项出现一次或多次
  • * :前一项零次或多次

三、标识符和关键字

3.1、变量

编程语言之中,把所有由用户自定义的名称都叫做标识符(Identifiers),包括包名、模块名、变量名、方法名、类名称、常量名等。

把一个值赋值给一个名字的时候,它会存储在内存中,称之为变量(variable)
在使用变量之前,需要对其先赋值,我们把这个动作称之为初始化

动态类型:在任何时刻,只要需要,某个对象引用都可以重新引用一个不同的对象(可以是不同的数据类型),=用于将变量和内存的某个对象绑定,如果对象事先存在直接绑定,否则创建对象,如果一个对象的引用计数器为零,则为垃圾。将被Python的垃圾回收器回收。

3.2、标识符命名规则

1、字母、数字、下划线组成,并且不能以数字开头
2、区分大小写,name和Name是不同的变量
3、下划线开头的标识符有特殊含义
4、不能是Python中的关键字或保留字

关于标识符的原文

Python 的标识符的语法是基于Unicode标准附件UAX-31的(详细信息,请参见PEP 3131)。

在ASCII范围内(U+0001~U+007F),标识符的有效字符和Python2.x相同:大写字母和小写字母(a-zA-Z)、下划线、0-9组成(除了第一个字符);

在Python3.x之中引入了ASCII范围之外的其他字符,这些字符使用Unicode字符数据库(包含在unicodedata模块之中)
标识符长度是不限制的。

dentifier   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">

上述提到的Unicode分类码为
Lu——大写字母(uppercase letters)
LI——小写字母(lowercase letters)
Lt——字母,词首字母大写(titlecase letters)
Lm —— 修饰符(modifier letters)
Lo ——其他字母(other letters)
Nl—— 字母、数字(letter numbers)
Mn——非间距标记(nonspacing marks)
Mc——间距组合标记(spacing combining marks)
Nd——数字(decimal numbers)
Pc——连接符(connector punctuations)
Other_ID_Start ——在PropList.txt文件中显示的字符列表,支持向后兼容
Other_ID_Continue —— (likewise)

在解析过程之中,所有的标识符都会转换为正常NFKC格式,标识符比较是基于NFKC 格式的。

3.3、python中的关键字

python3.x

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', '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']

python2.x

python2.x
>>> import keyword
>>> keyword.kwlist
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in','is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while',
'with', 'yield']
>>>

除了以上的方法,我们还可以在交互环境之中输入help(),此时我们再输入keywords,就会在界面上显示所有的关键字。方法如下
help
keywords

四、变量命名方法

4.1、驼峰命名法:

像驼峰一样采用混合使用大小写字母来构成变量和函数名的名字。驼峰命名法有两种表示方式:小驼峰命名法(Lower Camel Case)、大驼峰式命名法(Upper Camel Case)。

4.1.1、小驼峰式命名法

第一个单词以小写字母开始;第二个单词的首字母大写,例如:userName、firstName、lastName

4.1.2、大驼峰式命名法:

又称帕斯卡命名法,每一个单字的首字母都采用大写字母,例如:Person、ContentProvider。
推荐变量名与方法名使用小驼峰、类名称使用大驼峰。

4.4、匈牙利命名法

该方法方法运用于Windows编程之中,这种命名方法由微软程序员查尔斯·西蒙尼提出的,该方法通过在变量名加上相应的小谢字母的符号标识作为前缀,标识出变量的作用域、类型等,这些符号可以多个同时使用 ,顺序是m_(成员变量),再指针,再数据类型,再其他等。

4.5、下划线命名法(了解即可)

此方法在C语言出现的时候,就有人使用该方法对变量或方法命名。该方法就是使用“_”来连接单词。例如:send_buffer、the_world_is_flat。

五、编码规范

5.1、代码缩进

缩进统一使用四个空格,而不是一个Tab

5.2、空行分隔代码段

每个代码段之间使用空行分开,if while for def class 输入/输出等都可以当做是一个代码段来处理

5.3、包、模块的命名规

包:要求统一使用小写,一个目录就是一个包
模块:要求统一使用小谢,一个*.py文件就是一个模块

5.4、类、对象的命名规范

类名要求使用大驼峰式写法
对象要求使用小驼峰式写法

5.5、函数(方法)的命名规范

函数(方法)要求使用小驼峰写法

5.6、代码注释

函数、模块需要使用小驼峰写法

注:以上只是我的个人使用的规范,你如果使用下划线命名法,也是可以的。

六、数据类型简介

Python是强数据类型的语言,Python是动态数据类型的,变量的类型在“=”绑定的时候才确定的。Python中的基础数据类型有数字型(整型、浮点型、复数类型)、布尔型、字符串、列表、元组、字典、对象等。

6.1、数字型之整型

6.1.1、字面量(Literals)

所谓字面量 就是用来表示内建类型的常量值的符号。

整型字面量的词法定义

integer      ::=  decinteger | bininteger | octinteger | hexinteger
decinteger   ::=  nonzerodigit (["_"] digit)* | "0"+ (["_"] "0")*
bininteger   ::=  "0" ("b" | "B") (["_"] bindigit)+
octinteger   ::=  "0" ("o" | "O") (["_"] octdigit)+
hexinteger   ::=  "0" ("x" | "X") (["_"] hexdigit)+
nonzerodigit ::=  "1"..."9"
digit        ::=  "0"..."9"
bindigit     ::=  "0" | "1"
octdigit     ::=  "0"..."7"
hexdigit     ::=  digit | "a"..."f" | "A"..."F"

根据上述,可以得出下面几种写法是正确的

7     2147483647                        0o177    0b100110111
3     79228162514264337593543950336     0o377    0xdeadbeef
      100_000_000_000                   0b_1110_0101

6.1.2、整型简介

Python中支持二进制、八进制、十进制、十六进制这四种进制数表示

No进制Python2python3
1二进制0b开头 0-1组成0b开头 0-1组成
2八进制0o开头 0-7或者0开头0o开头 0-7
3十进制0-9组成0-9组成
4十六进制0x开头 0-9 a-f(A-F)组成0x开头 0-9 a-f(A-F)组成

6.1.3、进制转换方法

No方法描述
1oct()转换成八进制
2hex()转换成十六进制
3bin()转换成二进制
4int()转换成十进制

6.4、Python3中整型表示为<class 'int'>

Python2中整型有两种,一种为<class 'int'>,另一种则表示为<class 'long'>

Numeric Types — int, float, long, comple

>>> type(1l)
<type 'long'>
>>> type(1)
<type 'int'>

6.5、数字型之浮点数(实数)

两种表示形式、一种是1.3这种小数形式,一种是科学计数法。例如 1.23e10 表示1.23*10^10 这种形式

浮点数字面量的词法结构

floatnumber   ::=  pointfloat | exponentfloat
pointfloat    ::=  [digitpart] fraction | digitpart "."
exponentfloat ::=  (digitpart | pointfloat) exponent
digitpart     ::=  digit (["_"] digit)*
fraction      ::=  "." digitpart
exponent      ::=  ("e" | "E") ["+" | "-"] digitpart

根据上面BNF描述,我们可以得出如下几种合法的写法

3.14    10.    .001    1e100    3.14e-10    0e0    3.14_15_93

6.6、数字类型之复数

虚数字面量的词法结构

imagnumber ::=  (floatnumber | intpart) ("j" | "J")

与数学上的复数概念一致,Z=a+bj,其中a是实数部分,b为虚数部分,ab都是浮点类型,虚数部分用J/j标识

对于复数z可以使用 z.real 获得实数部分,z.imag 获得虚数部分

有人可能会问为什么虚数是j,而不是在我们数学中所学的i ?
:因为在电气工程领域,虚部用j表示,而不是i,是为了区别于电流随时间变换的函数,这个函数通常写做i(t)。

6.7、整数、浮点数、复数之间的关系

整数->浮点数->复数

其中可以使用 int()float()complex() 方法进行数据这三种数据类型的转换。

**注:**复数类型并不能直接转换成浮点数或整型数。

总结

本文讲述了基本的编程概念,主要是为了后续更加深入的了解 Python 的学习以及框架设计。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小嘉丶学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值