第二章: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 模块导入的规范

  1. import语句:使用import后空一行写语句。import语句是导入模块中的部分内容,并在当前的命名空间中创建导入对象的引用。
  2. 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 正确的注释

################################

#

# 对一行代码注释,用#加上若干空格开始。

# 对一段代码注释,用#,段落之间以一个#分隔。

#

################################

特殊注释:

  1. 需使用中文注释: # -- coding: UTF-8 --
  2. 跨平台注释: # !/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

第二章习题:

  1. 以下变量命名不正确的是:(B D)

A. foo = the_value B. foo = 1_value C. foo = value D. foo = value&

  1. 计算2的38次方的值
print(2**38)
  1. 以下逻辑运算的结果

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. 编写程序计算1+2+3+…+100的结果
sum = 0

for x in range(1, 101):

    sum = sum + x

print(sum)