目录
前言
作为计算机科学家,最重要的技能就是问题求解。所谓问题求解,是发现问题、创造性思维解决方案以及清晰准确地表达解决方案的能力。而学习编程的过程,正是训练问题求解能力的绝佳机会。
重要的中英文互译
- 可移植性(portability):程序的一种属性:可以在多种类型的计算机上运行。
- 解释器(interpreter):一个读取其他程序并执行其内容的程序。
- 记号(token):即语言的基本元素,比如单词、数字等;3+¥=6中的¥在数学表达式中就不是合法的记号;
- 语法(syntax):用于控制程序结构的规则。
- 语法分析(parse):检查程序并分析其语法结构。
常见的语法错误示例:
SyntaxError:invalid token
意思是:
语法错误:无效的记号
- 交互模式(interactive mode):使用Python解释器的一种方式,在提示符之后键入代码。
- 脚本模式(script mode):使用Python解释器的另一种方式,从脚本中读入代码并运行它。
- 脚本(script):保存在文件中的程序。
- 异常(exception):程序运行中发现的错误。
- 模块(module):包含一组相关的函数的文件。
- 句点表示法(dot notation):调用模块中包含的函数的方法。
Python小白与大神的区别
条件表达式
if x > 0:
y = math.log(x)
else:
y = float('man')
用条件表达式改写后:
y = math.log(x) if x > 0 else float('man')
列表高端操作
def test(t):
res = []
for s in t:
res.append('a')
return res
用列表的高端写法后:
def test(t):
return ['a' for s in t] # 列表可以通过[]赋值直接修改
但下面的写法是错误的:
def test(t):
res = []
return res.append('a') for s in t # 没有这种写法!!!
会直接报错
收集关键词参数
我们知道*
操作符作为形参,可以使函数接受任意个数的实参数量,如下函数:
def printall(*args):
print(args)
但实际上,*操作符不会收集带有关键字(名称)的实参,比如:
printall(1, 2.0, '3') # 这种写法可以调用
printall(1, 2, third='3') # 这种写法会报错,不能接受带有关键字的实参
我们要记住,不带关键字的实参用*
操作符收集为一个元组,带有关键字的实参用**
操作符收集为一个字典,不能混收。
>>> def printall(*args, **kwargs):
>>> print(args, kwargs)
>>> printall(1, 2, third='3')
(1, 2) {
'third': '3'}
第一章
何谓程序
程序是指一组定义如何进行“计算”的指令集合,这里的“计算”具有丰富的内涵,可能是解方程根的数学运算;也可能是符号运算,比如搜索和替换文档的文本;或者图形相关的操作,如图像处理。
树立“值才是程序最基本的单位,而不是变量”的概念
值(value)是程序操作的最基本的东西,比如一个字母、数字或字符串。值有不同的类型。基本上,在任何可以使用值的地方,都可以使用任意表达式。
所谓变量,是指向一个值的名称;变量所具有的类型,就是其指向的值的类型。
从状态图来看可能能更好地理解变量与值的关系:
下面的赋值语句的状态图如图所示:
message = 'And now for....' # 在此只为强调状态图,有些部分省略
n = 17
pi = 3.14....
从状态图可以明显看出,是“变量 指向 值”而不是“值 指向 变量”。
形式语言和自然语言
自然语言指的就是人们说的语言,比如普通话。
形式语言是人们为了特殊用途创造的语言,比如编程语言。
第二章
变量及命名
关于变量的定义在上一章已然介绍过,注意其与值的关系。对于变量的命名,一般是以小写字母开头,在多个单词之间用“_”连接。
表达式和语句的定义
表达式是值、变量和操作符的集合。
语句则指的是一段会产生效果的代码单元。
字符串可进行的数学操作
仅可以进行两个,一个是“*”,一个是“+”。
第三章
模块及其使用方法
比如说math模块,其中包含了一些数学函数。如果想使用其中的函数,按照如下步骤操作:
1、将模块导入到运行环境中;
import math
2、上述语句将会创建一个名为math的模块对象(module object),该对象中包含了已定义的函数和变量,以一个句点(.)分隔,这个格式称为句点表示法(dot notation)。
height = math.sin(..)
函数的定义
以“def”关键词定义,如:
def print_ly(): #函数头
print(...) #函数体
需要注意的是,函数定义必须在使用它之前。
形参与实参
在函数定义时参数是形参,调用时的参数是实参。在下面这段代码的例子中,bruce
是形参,m
是实参:
def print_twice(bruce): # 定义
....
print_twice(m) # 调用
另外,函数名本身也可以作为实参输入到函数中进行调用,如下例:
def do_twice(f):
f()
f()
def print_spam():
print('spam')
do_twice(print_spam