第二章:python的基础语法
2.1 python的文件类型
2.1.1源代码:
py结尾,可在控制台下运行,不用编译。pyw是图形用户接口。也可直接用文本工具打开修改。
2.1.2字节代码:
pyc不能直接修改。通过脚本生成,代码如下
import py_compile
py_compile.compile('hello.py')
2.1.3优化代码:
pyo用命令行工具生成
cd /D D:\python2\example进入hello.py所在目录
python -O -m py_compile hello.py
-O表示生成优化代码,-m表示导入的模块作为脚本运行
2.2 python编码规范
2.2.1 命名规则
1.变量名,包名,模块名:小写,可用下划线
2.类名,对象名:类名首字母大写,对象名小写。类的属性和方法名以对象为前缀。类的私有变量私有方法以两个下划线为前缀。例如
class Student:# 类名大写
__name = ""# 私有实例变量前必须有两个下划线
def __init__(self, name):
self.__name = name # self相当于Java中的this
def getName(self):# 方法名首字母小写,其后每个单词的首字母大写
return self.__name
if __name__ == "__main__":
student = Student("borphi")# 对象名小写
print(student.getName())
3.函数名:通常小写,用下划线或者首字母大写增加可读性,导入的函数以模块名为前缀
2.2.2 代码缩进与冒号
不建议使用tab键,手打四个空格比较好。
2.2.3 模块导入的规范
- import语句:使用import后空一行写语句。import语句是导入模块中的部分内容,并在当前的命名空间中创建导入对象的引用。
- from…import语句:from…import语句在当前程序的命名空间中创建导入模块的引用,从而可以使用“sys.path”的方式调用sys模块中的内容。不建议使用。
2.2.4 使用空行分隔分隔代码
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,突出函数入口的开始。
下面代码创建了类A,类A中定义了两个方法funX()和funY()
class A:
def funX(self):
print( "funY() ")
def funY(self):
print( "funX() ")
if __name__ == "__main__":
a = A()
a.funX()
a.funY()
2.2.5 正确的注释
################################
#
# 对一行代码注释,用#加上若干空格开始。
# 对一段代码注释,用#,段落之间以一个#分隔。
#
################################
特殊注释:
- 需使用中文注释: # -- coding: UTF-8 --
- 跨平台注释: # !/usr/bin/python
2.2.6 语句的分隔
python支持分号,但是仅作为语句结束标识,可有可无。但如果在一行中书写多个语句,需用分号分隔。x=1; y=2; z=3
多行写一条语句用 \ 作为换行符。例如sql语句
sql = "select id,name \
from dept \
where name = 'A'"
print (sql)
2.3 变量和常量
2.3.1 变量的命名
字母、数字、下划线
2.3.2 变量的赋值
不用声明变量,变量的赋值操作就是变量声明和定义的过程,每个变量在内存中创建,都包括变量的标识、名称和数据的信息。
# 一次新的赋值操作,将创造一个新的变量
x = 1
print (id(x)) # 11229424
x = 2
print (id(x)) # 11229412
同时赋值操作:(序列的装包和拆包操作)
a = (1, 2, 3)
(x, y, z) = a
print ( "x = ", x) # x = 1
print ( "y = ", y) # y = 2
print ( "z = ", z) # z = 3
2.3.3 局部变量
局部变量的作用范围只在其被创建的函数内有效。
2.3.4 全局变量
能够被不同函数、类或文件共享的变量,(在函数外定义的变量。)通常在文件的开始处定义,eg
_a = 1
_b = 2
def add():
global _a # global用于引用全局变量
_a = 3 # 对全局变量_a重新赋值(本函数内)。
return "_a + _b = ", _a + _b
def sub():
global _b
_b = 4
return "_a - _b = ", _a - _b
print(add()) # 5
print(sub()) # -3
或者把全局变量放在一个专门的文件中,统一管理修改,创建一个名为gl.py的文件,文件内容如下:
# 全局变量
_a = 1
_b = 2
然后在别的文件里引用。use_global.py内容如下
# 调用全局变量
import gl
def fun():
print(gl._a)
print(gl._b)
fun()
2.3.5 常量
一旦初始化就不能改变的常量
# -*- coding: UTF-8 -*-
class _const: # 定义常量类_const
class ConstError(TypeError): pass # 继承自TypeError
def __setattr__ (self, name, value):
if self.__dict__.has_key(name):
# 如果__dict__中不包含对应的key则抛出错误
raise self.ConstError, "Can't rebind const(%s)"%name
self.__dict__[name] = value
import sys
sys.modules[__name__] = _const()
# 将const注册进sys.modules的全局dict中
用于定义常量模块
2.4 数据类型
2.4.1 数字
整型、浮点型、布尔型、分数类型、复数类型。C创建了一个int型的普通变量,而python创建的是一个整型对象,python并不能修改对象i的值。
# 下面两个i并不是同一个对象
i = 1
print (id(i))
i = 2
print (id(i))
可以用type类查看变量类型。可以复数。c = 7 + 8j
2.4.2 字符串
三种方式表示字符串。单引号,双引号,三引号。单引和双引作用是一样的。三引号是特殊用法,其中可以输入单引,双引和换行。
# 三引号用法
str = '''he say "helloworld!"'''
print (str)
三引号另一用法是制作文档字符串,python的每一个对象都有一个属性_doc_。用于描述该对象的作用。
# 三引号制作doc文档
class Hello:
'''hello class'''
def printHello:
'''print hello world'''
print ("hello world!") # hello world!
print (Hello.__doc__) # hello class
print (Hello.printHello.__doc__) # print hello world
其实感觉有点儿像另一种注释←
如果需要输出含有特殊字符的字符串,需要使用转义字符。使用双引号或三引号可以直接输出含有特殊字符的字符串,不需要使用转义字符。留空格的特殊情况:str = ”’he say: ‘hello world’ ”’ # 区分三引号和单引号。空格分开
2.5 运算符与表达式
2.5.1 算术运算符和算术表达式
** 求幂运算。python不支持自增和自减运算符。
对除法处理时python2和python3有所不同:整型除法返回浮点数,要得到整型结果,请使用//
python2: 1 / 2 = 0python3: 1 / 2 = 0.5
2.5.2 关系运算符和关系表达式
取消python2中<>的表示方式,统一使用 != 作为不等于的符号。
< <= > >= 优先级高于 == !=
2.5.3 逻辑运算符和表达式
and or not 例子看表达式优先级
print ("not 1 and 0 =>", not 1 and 0) # False
print ("not (1 and 0) =>", not (1 and 0)) # True
print ((1 <= 2) and False or True) # True
print ((1 <= 2) or 1 > 1 + 2) # True
第二章习题:
- 以下变量命名不正确的是:(B D)
A. foo = the_value B. foo = 1_value C. foo = value D. foo = value&
- 计算2的38次方的值
print(2**38)
- 以下逻辑运算的结果
a) True and False -> False b) False and True -> False
c) True or False -> True c) False or True -> True
d) True or False and True -> True e) True and False or False -> False
- 编写程序计算1+2+3+…+100的结果
sum = 0
for x in range(1, 101):
sum = sum + x
print(sum)