python学习

基础语法

第一个 Python 程序

  • 交互式编程

In [ ]:print ("Hello, Python!")

  • 脚本式编程

通过脚本参数调用解释器开始执行脚本,直到脚本执行完毕。当脚本执行完成后,解释器不再有效。

所有 Python 文件将以 .py 为扩展名。将以下的源代码拷贝至 test.py 文件中。

Python 标识符

在 Python 里,标识符由字母、数字、下划线组成。

在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。

Python 中的标识符是区分大小写的。

Python 保留字符

保留字不能用作常数或变数,或任何其他标识符名称。

行和缩进

Python 与其他语言最大的区别就是,Python 的代码块不使用大括号 {} 来控制类,函数以及其他逻辑判断。

python 最具特色的就是用缩进来写模块。

缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。

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

多行语句

Python语句中一般以新行作为语句的结束符。

但是我们可以使用斜杠( \)将一行的语句分为多行显示,

item_1 = 1
item_2 = 2
item_3 = 3
total = item_1 + \
        item_2 + \
        item_3
total

语句中包含 [], {} 或 () 括号就不需要使用多行连接符。

days = ['Monday', 'Tuesday', 'Wednesday',
        'Thursday', 'Friday']
days

Python 引号

Python 可以使用引号( ' )、双引号( " )、三引号( ''' 或 """ ) 来表示字符串,引号的开始与结束必须的相同类型的。

其中三引号可以由多行组成,编写多行文本的快捷语法,常用于文档字符串,在文件的特定地点,被当做注释。

word = 'word'
sentence = "这是一个句子。"
paragraph = """这是一个段落。
包含了多个语句"""

print(word)
print(sentence)
print(paragraph)

Python模块和包

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。

为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。

使用模块有什么好处?最大的好处是大大提高了代码的可维护性。

模块一共三种:

  • python标准库

  • 第三方模块

  • 应用程序自定义模块

import sys 
 
print('Python 路径为:', sys.path, '\n')

import 语句

想使用 Python 源文件,只需在另一个源文件里执行 import 语句, 当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。

搜索路径是一个解释器会先进行搜索的所有目录的列表。 如想要导入模块 support,需要把命令放在脚本的顶端:

# Filename: support.py

def print_func( par ):
    print ("Hello : ", par)
    return

test1.py 引入 support 模块:

# Filename: test1.py

# 导入模块
import support

# 现在可以调用模块里包含的函数了
support.print_func("Runoob")

一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

在解释器的当前目录或者 sys.path 中的一个目录里面来创建一个fibo.py的文件,代码如下:

# Filename: fibo.py
 # 斐波那契(fibonacci)数列模块

def fib(n):    # 定义到 n 的斐波那契数列
    a, b = 0, 1
    while b < n:
        print(b, end=' ')
        a, b = b, a+b
    print()

def fib2(n): # 返回到 n 的斐波那契数列
    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)
        a, b = b, a+b
    return result
import fibo
fibo.fib2(100)

 

from … import 语句

Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中,要导入模块 fibo 的 fib 函数,使用如下语句:

from fibo import fib, fib2
fib(500)

包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。比如一个模块的名称是 A.B, 表示一个包 A中的子模块 B 。

使用模块的时候,不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式也不用担心不同库之间的模块重名的情况。

这样不同的作者都可以提供 NumPy 模块,或者是 Python 图形库。

不妨假设你想设计一套统一处理声音文件和数据的模块(或者称之为一个"包")。现存很多种不同的音频文件格式(基本上都是通过后缀名区分的,例如: .wav,:file:.aiff,:file:.au,),所以你需要有一组不断增加的模块,用来在不同的格式之间转换。

并且针对这些音频数据,还有很多不同的操作(比如混音,添加回声,增加均衡器功能,创建人造立体声效果),所以你还需要一组怎么也写不完的模块来处理这些操作。这里给出了一种可能的包结构(在分层的文件系统中):

sound/                          顶层包
      __init__.py               初始化 sound 包
      formats/                  文件格式转换子包
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  声音效果子包
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/                  filters 子包
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...

在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。

目录只有包含一个叫做 init.py 的文件才会被认作是一个包

用户可以每次只导入一个包里面的特定模块,比如:

import sound.effects.echo

这将会导入子模块:sound.effects.echo。 必须使用全名去访问:

sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

还有一种导入子模块的方法是:

from sound.effects import echo

这同样会导入子模块: echo,并且不需要那些冗长的前缀,所以可以这样使用:

echo.echofilter(input, output, delay=0.7, atten=4)

还有一种变化就是直接导入一个函数或者变量:

from sound.effects.echo import echofilter

同样的,这种方法会导入子模块: echo,并且可以直接使用 echofilter() 函数:

echofilter(input, output, delay=0.7, atten=4)

变量,表达式和语句

变量和类型

变量是指向各种类型值的名字,以后再用到某个值时,直接引用这 个名字即可,不用在写具体的值。在Python中,变量的使用环境非常宽 松。没有明显的变量声明,而且类型不是固定的。你可以把一个整数赋值 给变量,如果觉得不合适,把字符串赋值给它完全可以。

x = 100
print (x)
type(x)
x = "China"
print (x)
type(x)

 

在别的语言中这是不允许的,若把字符串赋值给整数变量是错误的。

如果不能确定变量或数据的类型,就用解释器内置的函数type确认。

type("Hello,World!")
type(17)
x = "QHD"
type(x)

 

type(3.0)
type("2.5")

变量名和关键字

程序中的变量名要有实际意义。变量名可以是由数字和字符组成的任 意长度的字符串,但必须以字母开头。python是区分大小写的。

Name = "Yaohui"
name = "Jin"
print (name, Name)

符号“ ”连接由多个单词组成的变量名。

my_name = "金耀辉"
print (my_name)

如果定义了一个错误的变量名,解释器显示语法错误。

1_first = "第一名"
my$ = "dollar"
print = 12345 #谨慎操作

 

语句

语句是Python解释器可以执行的命令。我们已经知道两条语句:打印和赋值。 赋值语句有两个作用:一是建立新的变量,二是将值赋予变量。 当打印不存在的变量时,系统给出错误信息。

message = "How are you?"
n = 18
pi = 3.1415926
print (abc)

打印语句print输出表达式的计算结果。单个变量也可以看作是表达式。如果在一行打印多个变量,可以用逗号将这些变量隔开,逗号禁止换行。

x = 3
y = 8.9
print (x, y, "hello")

特殊符号的打印方法。

print (x,"\t","n","\n",y)

表达式

表达式由值、变量和运算符组成。如果在命令行上输入表达式,可以显示结果:

23.3 + 1.2

单一的值或变量也可以当作是表达式:

45
x = 1.2
x

 

计算表达式和打印值是有很大区别:

"I am free!"
message = "I am free!"
message
print (message)

 

 

运算符和操作数

运算符是像加号和减号之类的特殊符号。运算符操作的对象是操作数。

==

add = 72 + 23
sub = 108 - 204
mul = 108 * 0.5
div = 108 / 9
po  = 3 ** 2
re  = 18 % 7
print (add, sub, mul, div, po, re)

运算的顺序

如果表达式中有不止一个运算符,那么计算的顺序依靠“优先规则”。

  • 小括号有最高的优先级
  • 乘幂运算的优先级仅次于小括号
(1 + 3) ** 2
3 * 3 ** 2

 

  • 乘法和除法的优先级相同,比加减法的优先级高
2 + 3 * 3 + 2
4 - 10 / 5
4 * 5 / 2

 

 

  • 具有相同优先权的运算符从左到右进行计算

字符串操作

通常情况下,字符串放在双引号或单引号之间。字符串不能进行除法减法和字符串之间的乘法运算,下面的操作都是非法的:

"hello" / 3
string = "string"
string - 1
string * "hello"

 

 

加法“+”能够连接两个字符串成为一个字符串。

string1 = "Jin"
string2 = "Yaohui"
print (string1 + string2)

乘法“*”可以操作字符串。只是其中一个操作数必须是字符串,另 一个必须是整数。字符串被重复整数遍。

3 * "Love"
string = "python"
string * 2

 

注释

当程序越来越复杂时,读懂它就变得非常困难。想依靠部分的代码来了解整个程序要做的,是困难的。因此,好的习惯是在程序中加入适当的注释,以解释它要做的事情。

注释必须以符号“#”开始:

# 打印1+1的结果 
print (1 + 1)

注释可以单独占一行,也可以放在语句行的末尾:

print (1 + 1) # 打印1+1的结果

练习1

还记得小学的复利计算应用题吗?如果你将1万元存入银行,每年的利息是3%,那么7年后一共能拿到多少钱呢?请按照下面的提示完成计算。

# 创建名为savings变量,存入初始本金
savings = 100

# 创建利息变量 factor


# 计算7年后的本金利息总和 result


# 输出计算结果 result

练习2

在交互模式上尝试下面,看看会怎么有什么结果

# n=42是可以的,那42=n怎么样?


# 试试x=y=1呢?


# 有的语言每个语句结尾都必须有个单引号或者分号,试试在Python句末放个会咋样?


# 句尾放个句号试试呢?


# 数学上你可以把x和y相乘写成xy,Python里面你这么试试看?

函数

函数

函数调用的例子

type("world") 

函数type,它的作用是显示值和变量的类型。括号内的变量和值是函数的参数。函数返回的结果叫返回值。

函数定义

函数的定义形式如下:

def add(p1, p2):
    print (p1, "+", p2, "=", p1+p2)
add(1, 2) 

 

函数的目的是把一些复杂的操作隐藏,来简化程序的结构,使其容易阅读。函数在调用前,必须先定义。 程序调用函数时,转到函数 内部执行函数内部的语句,函数执行完毕后,返回到它离开程序的地方, 执行程序的下一条语句。

函数的行参和实参

def subtracter(p1, p2): 
    print (p1, "-", p2, "=", p1-p2) 

var1 = 3.1415 
var2 = 4.0987 
subtracter(var1, var2) 

在这个例子中,函数subtracter有两个参数: p1和p2。他们是函数的行参。 变量var1和var2是函数的实参。实参把它的值传递给行参,行参被函数内的语句进行各种操作,而实参没有被改变。

函数也可以将表达式当作它的参数:

def display(arg): 
    print (arg)  
a1 = 4.5
a2 = 3 
display(a1 + a2) 

函数的返回值

函数的返回值,例如计算圆的面积

def area(radius): 
    atemp = 3.1415 * radius ** 2 
    return atemp 
area(2.0)

表达式还可以进一步简化成如下的形式

def area1(radius): 
    return 3.1415 * radius ** 2 
area1(3.0)

类型转换

将变量或值从一种类型转换成另一种类型的内置函数。例如int函数能够将符合数学格式数字型字符串转换成整数。否则,返回错误信息。

int('32') 
int('Hello') 

 

函数int也能够把浮点数转换成整数,但浮点数的小数部分被截去。 

int(3.99999)
int(-2.3)

 

函数float将整数和字符串转换成浮点数:

float(32)
float('3.14159')

 

函数str将数字转换成字符:

str(32)
str(3.14159)

 

练习3

写一个名叫right_justify的函数,形式参数是名为s的字符串,将字符串打印,前面流出足够的空格,让字符串最后一个字幕在第70列显示。

条件表达式

布尔表达式

布尔表达式的值只有两个: 真和假。 在Python语言中,真值为1,假值为0。

  • x == y #x等于y
  • x != y #x不等于y
  • x > y #x大于y
  • x < y #x小于y
  • x >= y #x大于等于y
  • x <= y #x小于等于y
x = 3.4
y = 9
z = 4.55
x == y
x != z
x > y
y > x
z <= y

 

逻辑操作符

Python有三种逻辑操作: and、or、not。分别是:与、或、非。

a = 1
b = 0 
a and b
a or b
not a
not 0

 

 

条件语句

在程序执行的过程中,时常依据一些条件的变化,改变程序的执行流程。

if (x > 0): 
    print (x) 

第二种if语句的形式是有两个执行流程,关键字else(否则)引出另一个程序流程。

if x%2 == 0: 
    print (x, "is even”) 
else: 
    print (x, "is odd”) 

程序的分支不止两个,可能是三个,或更多。

def largeNumber(x, y):
    if x < y:
        print (x, "小于", y)
    elif x > y:
        print (x, "大于", y)
    else:
        print (x, "等于", y)

largeNumber(3, 6)

while语句

计算机最擅长做自动的、重复性的工作,而且不会出错。

def f(x): 
    result = 0 
    while x > 0:   
        result = result + x 
        x = x - 1 
    return result

f(10)
f(10)
  • 计算循环的条件,将得到1或0;
  • 如果条件为0,退出while循环,执行循环外的语句;
  • 如果条件为1,执行while块内的每一条语句,然后返回第一步。

条件嵌套

一个条件可以包含在另一个条件中。

逻辑操作符提供了简化条件嵌套的方法。

x = 8.9
if x > 0:
    if x < 10:
        print ("x大于0且小于10")

第二种写法利用了and操作符,易于阅读。

if (0 < x) and (x < 10):
    print ("x大于0且小于10")

第三种写法与数学上的很相似。

if 0 < x < 10:
    print ("x大于0且小于10")

return语句

return在函数中返回函数值。它的另一个作用是当函数内有错误发生时,终止函数的运行,提前退出。

I

def printc(a, b):
    if  (a-b) < 0:
        print ("a小于b") 
    return
    
    print (sqrt(a - b))

printc(3,6)

练习4

奇的数学家拉马努金发现了一个无穷级数(1914年的论文),能够用来计算圆周率倒数的近似值:

 

写一个名叫estimate_pi的函数,用上面这个方程来计算并返回一个圆周率π的近似值。要使用一个while循环来计算出总和的每一位,最后一位要小于10的-15次方。你可以对比一下计算结果和Python内置的math.pi。

字符串

组合数据类型

数据类型:int、float和string。

string类 型与其它两种类型的数据还有本质的区别,因为它是由多个字符组成的。 我们可以把字符串当成一个整体,也可以取得字符串的任何部分。

name = "qswtp"
print (name[0])
print (name[4])
len(name)

 

 

字符串片断

字符串的一部分叫做片断。选取片段与选单个取字符很相似:

os = "Linux Unix FreeBSD"
print (os[0:5])

操作符[n:m]返回字符串的一部分,从第n个字符开始,到第m个字符结 束,包括第n个,但不包括第m个。如果你忽略了n,则返回的字符串从索 引0开始;如果忽略了m,则字符串从n开始,到最后一个字符。

print (os[11:])

如果试图用“[]”操作符修改字符串中的任何一个字符,将产生运行时错误。

love = "python" 
love[0] = P

字符串的值是不可改变的。可以取原字符串的一部分和添加的字符串相加,生成一个新的字符串:

I

newstr = "P" + love[1:] 
print (newstr) 

练习5

写一个名叫 avoids 的函数,接收一个单词和一个禁用字母组合的字符串,如果单词不含有该字符串中的任何字母,就返回真。

修改一下程序代码,提示用户输入一个禁用字母组合的字符串,然后输入不含有这些字母的单词数目。

你能找到5个被禁用字母组合,排除单词数最少吗?

列表

列表是一组任意类型的值,按照一定顺序组合而成的。组成列表的值 叫做元素(Elements)。每一个元素被标识一个索引,第一个索引也是0。列 表中的元素可以是任意类型,甚至是列表类型,也就是说列表可以嵌套。

列表值

列表中的元素用中括号括起来,以逗号分割元素。

[10, 20, 30, 40]
["spam", "bungee", "swallow"]
["hello", 2.0, 5, [10,20]]

 

 

列表的元素还可以是变量。但是修改变量的值,并不影响列表中元素 的值。

a = 1
b = 2
num = [a, b, 3]
print(num)
a = b = 9
print(a, b, num)

 

 

读写元素

读写列表中元素的方法与读写字符串中字符的方法一样-都是通过操作符“[ ]”。中括号内的表达式代表索引,请记住索引是从0开始的。

numbers = [13, 15]
print (numbers[0])
numbers[1] = 5
print (numbers[1])

索引可以是任何整数表达式,但不能是浮点数:

numbers[3 - 2]
numbers[1.0]

 

读写一个不存在的元素,将会发生一个运行时错误:

numbers[2]

索引也可以是一个负数,那么列表的最后一个元素的索引是-1,倒数第二个的索引是-2,依此类推:

numbers = [1, 2, 3, 4]
numbers[-2]

列表的一些方法

append在列表的尾部追加元素,参数是插入元素的值:

number = [0, 1, 2, 3]
number.append(4)
print (number)

方法insert在列表中插入元素,它有两个参数,一个是索引位置,一个 是插入元素的值:

number.insert(3, 5)
print (number)

方法extend合并两个列表为一个:

nation1 = ["French", "German"]
nation2 = ["Chinese", "Korean"]
nation1.extend(nation2)
print (nation1)
print (nation2)

方法index取得元素的索引值:

cars = ["Ford", "Fiat", "Volvo"]
cars.index("Ford")

方法remove从列表中删除第一次出现的值:

color = ["red", "green", "yellow", "green", "black"]
color.remove("green")
print (color)

方法pop删除最后一个值,然后返回这个值:

letter = ["a", "b", "c", "d"]
letter.pop()

 

print (letter)

列表长度

函数len返回列表的长度,即元素的个数。可以用这个值作为遍历列表的变 量。

os = ["Linux", "Unix", "FreeBSD", "Mac"]
i = 0
while i < len(os):
    print (os[i])
    i=i+1

列表之中还可以包含列表,但嵌套的列表被当作一个元素。

list1 = ["hello", 2.0, 5, [10,20]]
len(list1)

in是一个布尔操作符,它测试左边的操作数是否包含于列表。

color = ["red", "green", "yellow", "green", "black"]
"yellow" in color
"purple" in color

 

我们可以用not和in 的组合来测试一个元素不包含于列表。

"purple" not in color

列表和for循环

用for循环遍历列表,更加简明,它没有循环变量。

os = ["Linux", "Unix", "Mac", "Windows"]
for os in os:
    print (os)

列表操作符

加号操作符”+”将两个列表连接成一个列表:

a = [1, 2, 3]
b = [4, 5, 6]
c = a + b
print (c)

乘号操作符“*”表示把列表的所有元素重复一定的次数

[1, 2, 3] * 3

列表片断

通过操作符“[]”,将列表元素连续取出的部分,叫片断。

list = ["a", "b", "c", "d", "e", "f"]
list[1:3]
list[:4]
list[3:]

 

 

列表元素是可变的

和字符串不一样,列表的元素是可更改的,这意味着我们可以修改、添加 或删除列表的元素值。

fruit = ["banana", "apple", "quince"]
fruit[0] = "pear"
fruit[-1] = "orange"
print (fruit)
list = ["a", "b", "c", "d", "e", "f"]
list[1:3] = ["x", "y"]
print (list)

 

也可以通过给元素赋空值,删除一些元素:

list = ["a", "b", "c", "d", "e", "f"]
list[1:3] = []
print (list)

或是利用列表片断,在特定的位置插入元素。

list = ["a", "d", "f"]
list[1:] = ["b", "c"]
print (list)
list[4:4] = ["e"]
print (list)

元素的删除

Python提供了关键字del删除列表中的元素。

a = ["one", "two", "three"]
del a[1] 
a

关键字del可以处理负数索引。如果索引超出范围,就会产生运行时错 误。也可以用片断作为关键字del的索引:

list = ["a", "b", "c", "d", "e", "f"]
del list[1:5]
print (list)

别名

因为变量指向内存中的值,如果我们将一个变量赋值给另一个变量,那末这两个变量指向同一个对象。

a = [1,2,3]
b = a
id(a)
id(b)

 

因为列表有不同的名字,分别叫做a和b,我们叫它别名。利用操作符“[]”修改任何一个列表的元素,另一个列表做相同的改变。

a = [1,2,3]
b = a
b[0] = 5
print(a)

克隆列表

如果要修改列表,但是要保留原来列表的一份拷贝,就需要列表自我复 制,这过程叫做克隆。克隆的结果是产生两个值一样,但却有不同标识符 的列表。克隆的方法是利用列表的片断操作符:

x = [1, 3, 5, 7]
y = x[:]
print(y)
y[0] = 9
print(y)
print(x)
id(x)
id(y)

 

矩阵

嵌套列表可以代表矩阵

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
matrix[1]
matrix[1][1]

 

 

练习6

写一个函数,名为 nested_sum,接收一系列的整数列表,然后把所有分支列表中的元素加起来。如下所示:

t = [[1, 2], [3], [4, 5, 6]]
nested_sum(t)
21

练习7

写一个函数,名为 chop,接收一个列表,修改这个列表,掐头去尾,返回空值。如下所示:

t = [1, 2, 3, 4]
chop(t)
t
[2, 3]

In [ ]:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值