Python学习日记-基础语法1

本章目录

  • Part One:标识符
  • Part Two:Python关键字
  • Part Three:注释
  • Part Four:行与缩进, 空行
  • Part Five:多行语句

查了查资料,Python是用模块(module)和 包(package)来组织大型文件的。
模块 是一个由 变量、函数、类 等基本元素组成的功能单元,设计良好的模块通常是高内聚、低耦合、可复用、易维护的。而一个模块内部是可以包含一个或者多个类的。
包 是管理模块的容器,它具有 可嵌套性:一个包可以包含模块和其他包。从文件系统的视角来看,包就是目录,模块就是文件(之前写第一个Python程序里创建的py文件)。

标识符

标示符其实也就是命名规则,在Python里面必须要遵循以下原则:

  • 第一个字符必须是字母表中字母或下划线'_';
  • 标识符的其他的部分由字母、数字和下划线组成;
  • 标识符对大小写敏感;
  • 不能使用Python关键字作为标识符名称。

粗看下来,跟Java的命名规则一样,不过也有几点是要尽量避免的规则:

  • 单字符名称, 除了计数器和迭代器;
  • 包/模块名中的连字符(-);
  • 双下划线开头并结尾的名称(Python保留, 例如init)。

同时呢,由于组织结构的不一样(Java是包和类,而Python是包和模块),所以在命名约定上也有一些不同:

  • 所谓“内部(Internal)”表示仅模块内可用,或者,在类内是保护或私有的;
  • 用单下划线(_)开头表示模块变量或函数是protected的(使用import * from时不会包含);
  • 用双下划线(__)开头的实例变量或方法表示类内私有;
  • 将相关的类和顶级函数放在同一个模块里。不像Java, 没必要限制一个类一个模块;
  • 对类名使用大写字母开头的单词(如CapWords, 驼峰法),但是模块名应该用小写加下划线的方式(如lower_with_under.py)。 尽管已经有很多现存的模块使用类似于CapWords.py这样的命名,但现在已经不鼓励这样做,因为如果模块名碰巧和类名一致,这会让人困扰。

这些可以总结为Python之父Guido推荐的规范:

Type(模块) Public(公有的) Internal(内部的)
Modules(模块) lower_with_under _lower_with_under
Packages(包) lower_with_under
Classes(类) CapWords _CapWords
Exceptions(异常) CapWords
Functions(函数) lower_with_under() _lower_with_under()
Global/Class Constants(常量) CAPS_WITH_UNDER _CAPS_WITH_UNDER
Global/Class Variables(类变量,即静态变量) lower_with_under _lower_with_under
Instance Variables(实例变量,即成员变量) lower_with_under _lower_with_under(protected) or __lower_with_under (private)
Method Names(方法) lower_with_under() _lower_with_under() (protected) or __lower_with_under() (private)
Function/Method Parameters(参数) lower_with_under
Local Variables(局部变量) lower_with_under

综上所述,我们在之前写的第一个python程序其实是不规范的。
我们之前定义的模块名字是:


创建Python文件.png

现在应该改成:


修改模块名.png

Python关键字

Python中,不能使用关键字作为标识符。Python的官方API库里面提供了一个keyword模板,可以输出当前版本的所有关键字:

import keyword
var = keyword.kwlist
print(var)

当前总共有33个关键字:

['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']

注释

注释可以起到一个备注的作用,团队合作的时候,个人编写的代码经常会被多人调用,为了让别人能更容易理解代码的通途,使用注释是非常有效的。
Python中的注释只要有3种:单行注释,多行注释以及编码注释。

  1. 单行注释
    单行注释是以#开头,#号后面的内容编译器会忽略掉。比如:
# 这是一条输出语句
print('Hello World')  # 后面的内容会被忽略掉

可以看到,#号后面要加个空格,要不会出现警告。

  1. 多行注释
    多行注释可以用多个# 标注
# 这是一条输出语句
# 第二行注释
print('Hello World')

也可以用''' '''或者""" """包裹

# 这是一条输出语句
# 第二行注释

"""
多行注释
多行注释
"""

'''
多行注释
多行注释
'''
print('Hello World')

同时呢,多行注释的标示也可用于多行字符串,顺道查看了一下官方的源码,发现用#和"""的比较多。

  1. 编码注释
    编码注释在Python2.x用的比较多,因为在旧版里,文件默认使用ASKII码保存文件。而在Python3.x里,文件默认使用unicode编码,这样的话就可以识别中文了,不会让中文产生乱码。
    编码注释最标准的格式是:
# -*- coding:  -*-

例如:

# -*- coding: gbk -*-

这么写的好处是可以支持多种编辑器,移植性好。
另外,需要注意的是必须将编码注释放在第一行或者第二行
还有其它比较简单的写法,比如官方源码使用的是:

# encoding: utf-8

还可以是:

# coding=  
# vim: set fileencoding= :

总之,所有的标准是按照一个正则表达式给出的:

\%^.*\n.∗\?#.*coding[:=]\s*[0-9A-Za-z-_.]\+.*$ 

其中的意思就是必须包含#,且#号之前不能有字符换行等其他字符,字符串中必须包含coding后面可以跟:或者=接下来就是编码名称。

行与缩进,空行

Python是使用缩进来表示代码块的,不需要{}。
缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数,所以最好是用4个空格来控制缩进,例如:

if True:
    print("True")
else:
    print("False")

而如果缩进不一致呢,IDE工具会自动提示出错误,比如

if True:
    print("True")
    print("Same")
else:
    print("False")
  print("Blabla")

会报错:


IDE缩进错误.png

强行运行,也会报错:


运行错误.png

另外,空行也是Python程序的一部分。
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。

空行与代码缩进不同,空行并不是必须要遵守的Python语法。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
如果不加入空行,不会报错,不过会有警告,比如:


空行提示.png

多行语句

  1. 分行
    Python通常是用一行来写完一条语句,但是如果语句过长,可以用\来实现多行,例如:
item_one = 1
item_two = 2
item_three = 3
total = item_one + \
        item_two + \
        item_three
print(total)

使用Pycharm的话,我们只需要在想要分行的地方敲回车即可。
在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(),例如:

total = ['1', '2', '3'
        '4', '5']

总之,使用IDE工具的话,语句的分行并不需要太过在意。

  1. 一行
    前面说的是一行语句分多行显示,那么如果多行语句想写到一行呢,在多条语句间使用分好分割即可,例如:
import sys; x = 'runoob'; sys.stdout.write(x + '\n')

虽然语法上这么写没错,不过IDE工具会报警告,提示


一行警告.png

说明这种写法并不被提倡。

  1. 代码组
    在前面的缩进部分,有提到过代码块这个概念,不过那时候关注的主要是缩进。那么,什么是代码组?
缩进相同的一组语句构成一个代码块,我们称之代码组。
像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。
我们将首行及后面的代码组称为一个子句(clause)。

例如:

a = 3
if a == 1:
    print('a')
    print('A')
elif a == 2:
    print('b')
    print('B')
else:
    print('c')


又仔细研究了下Python风格规范,貌似还有很多,回头有空再改了,具体参考Google出品的Python风格指南

你可能感兴趣的:(Python学习日记-基础语法1)