Python笔记

2.编码

 

import 与 from...import...与import...as...

总结:

模块是一组Python代码的集合,可以使用其他模块,也可以被其他模块使用。

创建自己的模块时,要注意:

  • 模块名要遵循Python变量命名规范,不要使用中文、特殊字符;
  • 模块名不要和系统模块名冲突,最好先查看系统是否已存在该模块,检查方法是在Python交互环境执行import abc,若成功则说明系统存在此模块。

 

4.输入

name = input("请输入名字:")

5.输出

print("name is %s"%name)  

print("name:%s, age:%d"%(name,age)) 

print("name:{0}, age:{1}".format(name,age)) #(标号可不写,为默认顺序)

print("name:{name}, age:{age}".format(name = "你的名字",age = 60))

 

import math

print('常量 PI 的值近似为 {0:.3f}。'.format(math.pi)) #常量 PI 的值近似为 3.142。

 

table = {'tbl_a': 1, 'tbl_b': 2, 'tbl_c': 3}

print('tbl_b: {0[tbl_b]:d}; tbl_a: {0[tbl_a]:d}; tbl_c: {0[tbl_c]:d}'.format(table))

#tbl_b: 2; tbl_a: 1; tbl_c: 3

 

table = {'tbl_a': 1, 'tbl_b': 2, 'tbl_c': 3}

print('tbl_b: {tbl_b:d}; tbl_a: {tbl_a:d}; tbl_c: {tbl_c:d}'.format(**table))

#tbl_b: 2; tbl_a: 1; tbl_c: 3

6.类型转换

a = int("100")  # 转换为数字

a = str("100“)  # 转换为字符串

7.python2与python3

python2中input的内容当做执行的内容,python3当做字符串。如a = input(“”). python2中的raw_input相当于python3中的inpout。

python2 中支持 <> 是不等于的意思,python3不支持,应该用 != 表示

8.运算符

一、算述运算符:

1 + 1 = 2 (加法)

4 - 10 = -6 #(减法 - 得到负数或是一个数减去另一个数)

"a" * 5 = "aaaaa" #(乘法 - 两个数相乘或是返回一个被重复若干次的字符串)

2 ** 3 = 8 #(幂 - 返回2的3次幂)

5 / 2 = 2.5 #(除法)

5 // 2 = 2 #(取商 - 返回商的整数部分)

5 % 2 = 1 #(取余 - 返回除法的余数)

二、赋值运算符:

i += 1   等价于 i = i + 1
i  -= 1   等价于 i = i - 1
i  *= 2   等价于 i = i * 2
i  /= 2   等价于 i = i / 2
i  //= 2  等价于 i = i // 2
i  %= 2 等价于 i = i % 2
i  **= 2 等价于 i = i ** 2

9.逻辑运算符

not , and , or

优先级(短路原则):

and:条件1 and 条件2 ,如果条件1为假,那么这个and前后两个条件组成的表达式的计算结果就一定为假,就不判断条件2了

  or:条件1 or 条件2,如果前面的第一个条件为真,那么这个or前后两个条件组成的表达式的计算结果就一定为真,就不判断条件2了

10.流程

**表达式**操作运算符、常量及变量:

(1)表达式:由操作数和运算符组成的一句代码或语句,表达式可以求值,可以放在" = "的右边,用来给变量赋值。

(2)操作运算符:

<  小于

<=  小于或等于

>  大于

>=  大于或等于

==  等于,比较对象是否相等(注意区分 = ,= 是赋值,==是比较)

!=  不等于

(3)常量:固定不变的量,字母大写

(4)变量: 存储信息,以后被调用

命名规则:

    • 1.字母数字下划线组成
    • 2.不能以数字开头,不能含有特殊字符和空格
    • 3.不能以保留字命名
    • 4.不能以汉字命名
    • 5.定义的变量名应该有意义
    • 6.驼峰式命名、下划线分割单词

    • 7.变量名区分大小写

(if...elif...else)

if 条件(如果): 

elif 条件(或如果):  

else否则:

图片 1

注意:

  • 1、每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。
  • 2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
  • 3、在Python中没有switch – case语句。

例:

# 该实例演示了数字猜谜游戏
number = 7
guess = 0
print("数字猜谜游戏!")
while guess != number:
    guess = int(input("请输入你猜的数字:"))

    if guess == number:
        print("恭喜,你猜对了!")
    elif guess < number:
        print("猜的数字小了...")
    elif guess > number:
        print("猜的数字大了...")

# 执行结果:

数字猜谜游戏!
请输入你猜的数字:5
猜的数字小了...
请输入你猜的数字:6
猜的数字小了...
请输入你猜的数字:8
猜的数字大了...
请输入你猜的数字:9
猜的数字大了...
请输入你猜的数字:7
恭喜,你猜对了!

 

if 嵌套:在嵌套 if 语句中,可以把 if...elif...else 结构放在另外一个 if...elif...else 结构中。

 

if 表达式1:
    语句
    if 表达式2:
        语句
    elif 表达式3:
        语句
    else:
        语句
elif 表达式4:
    语句
else:
    语句

例:

num=int(input("输入一个数字:"))
if num%2==0:
    if num%3==0:
        print ("你输入的数字可以整除 2 和 3")
    else:
        print ("你输入的数字可以整除 2,但不能整除 3")
else:
    if num%3==0:
        print ("你输入的数字可以整除 3,但不能整除 2")
    else:
        print ("你输入的数字不能整除 2 和 3")

 # 执行结果:

输入一个数字:5
你输入的数字不能整除 2 和 3

输入一个数字:6
你输入的数字可以整除 2 和 3

 

(while)

while 判断条件: #(while:当...的时候)

    语句

一、需要注意冒号缩进。另外,在Python中没有do...while循环。

例:while 循环使用 else 语句

i = 0
while i < 5:
    print (i, " 小于 5")
    i += 1      # 变量自增
else:
    print (i, " 等于 5")

# 输出结果:

0 小于 5
1 小于 5
2 小于 5
3 小于 5
4 小于 5
5 等于 5

二、以下实例使用了 while 来计算 1 到 100 的总和:

i = 100
sum = 0
counter = 1
while counter <= i:
    sum = sum + counter
    counter += 1
print("1 到 %d 之和为: %d" % (i,sum))

# 输出结果:

1 到 100 之和为: 5050

(for)

一、for循环可以遍历任何序列的项目,如一个列表或者一个字符串。

例:

languages = ["C", "C++", "Perl", "Python"]
for x in languages:
print (x)

# 输出结果:

C
C++
Perl
Python

二、以下 for 实例中使用了 break 语句,break 语句用于跳出当前循环体。

例:

sites = ["Baidu", "Google","frank-me","Taobao"]
for site in sites:
    if site == "frank-me":
        print("我的网址")
        break
print("循环数据 " + site)
else:
    print("到此为止!")
print("结束!")

 

# 输出结果:

循环数据 Baidu
循环数据 Google
我的网址
结束!

注意: i++,++i 在python中不允许使用。

(range函数)

一、如果你需要遍历数字序列,可以使用内置range()函数,它会生成数列。

例:

for i in range(5):
print(i)

# 输出结果:

0
1
2
3
4

二、也可以使用range指定区间的值。

例:

for i in range(5,9) :
print(i)

# 输出结果:

5
6
7
8

三、也可以使range以指定数字开始并指定不同的增量(甚至可以是负数,有时这也叫做'步长')。

例:

for i in range(0, 10, 3) :
print(i)

# 输出结果:

0
3
6
9

四、您可以结合range()和len()函数以遍历一个序列的索引

例:

>>> a = ['Google', 'Baidu', 'frank-me', 'Taobao', 'QQ']
>>> for i in range(len(a)):
>>> print(i, a[i])

# 输出结果:

0 Google

1 Baidu

2 frank-me

3 Taobao

4 QQ

五、可以使用range()函数来创建一个列表,用for直接历遍

>>> for i in list(range(5)):

...         print( i )

# 输出结果:

0
1
2
3
4

Python3 中的六个标准的数据类型:

Number(数字)

String(字符串)

List(列表)

Tuple(元组)

Sets(集合)

Dictionary(字典)

 

导入模块:

 

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

 

From 模块名 import 子模块1,子模块2,......

 

文件中有中文,不管是否为注释,python2执行报错。 

Python3 基本数据类型

print("hello world") 

缩进:

3.模块:

Python比较运算符

运算符

描述

实例

==

等于 - 比较对象是否相等

(a == b) 返回 False。

!=

不等于 - 比较两个对象是否不相等

(a != b) 返回 True。

>

大于 - 返回x是否大于y

(a > b) 返回 False。

<

小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。

(a < b) 返回 True。

>=

大于等于 - 返回x是否大于等于y。

(a >= b) 返回 False。

<=

小于等于 - 返回x是否小于等于y。

(a <= b) 返回 True。

 

python3 = unicode = 默认支持中文

Set(集合)

集合(set)是一个无序不重复元素的序列。

基本功能是进行成员关系测试和删除重复元素。

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
print(student)  # 输出集合,重复的元素被自动去掉
# 成员测试
**
if ('Rose' in student):
    print(
'Rose 在集合中') else:
    print(
'Rose 不在集合中')
# set可以进行集合运算 a = set(
'abracadabra')
b = set(
'alacazam'*)
print(a)
print(a - b)  
# a和b的差集
print(a | b)  # a和b的并集
print(a & b)  # a和b的交集
print(a ^ b)  # a和b中不同时存在的元素*

执行结果:

{'Jack', 'Tom', 'Rose', 'Mary', 'Jim'}

Rose 在集合中

{'a', 'r', 'b', 'd', 'c'}

{'r', 'b', 'd'}

{'a', 'm', 'l', 'r', 'b', 'z', 'd', 'c'}

{'a', 'c'}

{'z', 'r', 'b', 'm', 'd', 'l'}

 

 

举个例子,一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块。

Python赋值运算符

运算符

描述

实例

=

简单的赋值运算符

c = a + b 将 a + b 的运算结果赋值为 c

+=

加法赋值运算符

c += a 等效于 c = c + a

-=

减法赋值运算符

c -= a 等效于 c = c - a

*=

乘法赋值运算符

c *= a 等效于 c = c * a

/=

除法赋值运算符

c /= a 等效于 c = c / a

%=

取模赋值运算符

c %= a 等效于 c = c % a

**=

幂赋值运算符

c **= a 等效于 c = c ** a

//=

取整除赋值运算符

c //= a 等效于 c = c // a

 

'''

 

现在,假设我们的abcxyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名,比如mycompany,按照如下目录存放:

 

break和continue语句及循环中的else子句

一、break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。

例:

for letter in 'frank-me': # 第一个实例
    if letter == '-':           # 当符号为“-”时,跳出
        break
    print ('当前字符为 :', letter)

var = 10 # 第二个实例
while var > 0:
    print ('当期变量值为 :', var)
    var = var -1
    if var == 5:               # 到数字5(包含5)时不往下执行
        break

print ("See you!")

# 输出结果:

当前字符为 : f
当前字符为 : r
当前字符为 : a
当前字符为 : n
当前字符为 : k
当期变量值为 : 10
当期变量值为 : 9
当期变量值为 : 8
当期变量值为 : 7
当期变量值为 : 6
See you!

二、continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后继续进行下一轮循环。

例:

for letter in 'frank-me': # 第一个实例
    if letter == '-': # 字符为 "-" 时跳过输出,继续往下执行
        continue
    print ('当前字符 :', letter)

var = 10 # 第二个实例
while var > 0:
    var = var -1
    if var == 5: # 变量为 5 时跳过输出,继续往下执行
        continue
    print ('当前变量值 :', var)
print ("See you!")

# 输出结果:

当前字符 : f
当前字符 : r
当前字符 : a
当前字符 : n
当前字符 : k
当前字符 : m
当前字符 : e
当前变量值 : 9
当前变量值 : 8
当前变量值 : 7
当前变量值 : 6
当前变量值 : 4
当前变量值 : 3
当前变量值 : 2
当前变量值 : 1
当前变量值 : 0
See you!

三、循环语句可以有 else 子句,它在穷尽列表(以for循环)或条件变为 false (以while循环)导致循环终止时被执行,但循环被break终止时不执行。

例:

for i in range(2, 10):
    for x in range(2, i):
        if i % x == 0:
            print(i, '=', x, '*', i//x)
            break
    else:
    # 循环中没有找到元素
    print(i, '是质数')

# 输出结果:

2 是质数
3 是质数
4 = 2 * 2
5 是质数
6 = 2 * 3
7 是质数
8 = 2 * 4
9 = 3 * 3

 

for-else

 

for中没有break,则else一定会执行

for temp in strs: 

   print(temp)   

else: 

   print("")

 

const 修改变量为不可变。

 

(pass语句)

pass是空语句,是为了保持程序结构的完整性。

pass 不做任何事情,一般用做占位语句。

while True:
    pass # 等待键盘中断 (Ctrl+C)

最小的类:

class EmptyClass:
    pass

例:

for letter in 'frank-me':
    if letter == '-':
        pass
    print ('- 执行 pass')
print ('当前字符 :', letter)

print ("See you!")

# 输出结果:

当前字符 : f
当前字符 : r
当前字符 : a
当前字符 : n
当前字符 : k

  • 执行 pass
    当前字符 : -
    当前字符 : m
    当前字符 : e
    See you!

11.字符串(不可变)

一、创建
       ‘ str ’,“ str ”单引号或双引号包裹起来的内容
       顺序,序列
           -- 偏移量,索引,直标
       长度
           --len()返回一个序列的长度
       ** 单个字符,即长度为1的字符串

二、索引
       test_str[0]
       ** 特别的:最后一元素的索引“-1”,“-2”代表倒数第二,依此类推
       切片
           -- test_str[strat:end]
           -- start:起始索引(包含这个元素)
           -- end:结束索引(不包含这个元素)
           -- start < end
       不可变
           -- 不能修改

切片例:

str = "dasfaf"

str[2:4] #(取得2到3的), 

str[2:]  #(到最后), 

str[2:-1:2] #(步长2,隔一个取一个)

逆序:

str = "abcdefABCDEF" 

str[0:]  # out:"abcdefABCDEF" (顺序)

str[-1:]  # out:"F" (倒数第一个)

str[-1:0]  # out:"" 

str[-1:0:-1]  # out:"FEDCBAfedcb" (逆序,不含第一个)

str[-1::-1], str[::-1]  # out:"FEDCBAfedcba"(逆序

 

三、字符串连接:

a = b + c  #或者

a = "===%s==="%(b+c)  #或者

a = "==={}===".format(b+c)

四、常见操作

find: str.find("abc")  # 从左向右有返回第一个匹配字符串的起始下标,没有返回-1。rfind():从右向左。 

str.index("abc")  #找到返回起始下标,没有抛出异常。 存在rindex(). 

str.count("abc")  #匹配的个数。

 

str.replace("abc", "def")  #同java,把左边的替换成右边的 。

str.replace("abc", "def",1)  #第三个参数是从左到右替换个数。 

 

str.split(" ")  #同java ,通过指定分隔符(包括空格、换行(n)、制表符(t)等)对字符串进行切片,如果参数 num 有指定

          值,则仅分隔 num 个子字符串。

str.capitalize()  #字符串的第一个字母大写。 

str.title()  #字符串的每个单词的首字母大写。 

str.startswith("abc"), str.endswith("abc")  #同java,用于检查字符串是否是以指定子字符串开头,如果是则返回 True,

                            否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查。

str.lower() str.uper()  #所有的字母小写和大写。 

str.center(50)  #居中显示,行总长50 "     abc     "

str.ljust(50), str.rjust(50)  #左(右)对齐

 

str.lstrip()  #删除左边空格

str.rstrip()  #右边空格

str.strip()  #删除两端空格.

12.列表 (类似数组,可变,针对自身的变化)

运算符

表达式

结果

描述

len([1, 2, 3])

3

计算元素个数

[1, 2, 3] + [4, 5, 6]

[1, 2, 3, 4, 5, 6]

连接

[‘Hi!’] * 4

[‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’]

复制

3 in [1, 2, 3]

True

元素是否存在

for x in [1, 2, 3]: print(x, end=” “)

1 2 3

迭代

创建
    序列
    list1 = [1,2,3,4,5,6]

例:

["zhangsan","lisi"]

#定义

names = ["zhangsan", "lisi", 3.14]  #列表中的数据可以是不同的数据类型。  可以下标,和切片。

增删改查

   
    -- 1.list.append(item)向尾部添加
    -- 2.list.insert(index,item) 向指定的地方插入

例:#增

names.append("abc") #-->插入到最后; 

names.insert(0, "bcc") #-->插入指定位置。 

names = names1 + names2 #两个列表用连接符

names1.extend(names2) #扩充

#注意:append添加的元素;extend连接的列表

   
    -- list.pop(index)  #-->index 默认-1 (最后一个)

例:#删

names.pop() #-->删除最后一个; 

names.remove("lisi") #-->根据内容删除; 

del names[0] #-->下标删除

   

    -- 直接复制

例:#改

names[0] = "abc" 

   
    索引
    操作同字符串

例:#查

name[1:] # "lisi"

in, not in #是否存在 (if "zhangsan" in names:) 

#可以for... in 循环遍历

len(names) #元素个数 

 

13.字典(可变)

a = {"name":"yy", "age": 12}

 

a["name"] = "yy" #直接写key-value 

del a["name"]

a["name"] = "zz" #相同key的值覆盖。

a["name"], a.get("name")

例:

>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> params
{'server': 'mpilgrim', 'database': 'master', 'uid': 'sa', 'pwd': 'secret'}

>>> ["%s=%s" % (k, v) for k, v in params.items()]
['server=mpilgrim', 'database=master', 'uid=sa', 'pwd=secret']

>>> ";".join(["%s=%s" % (k, v) for k, v in params.items()])
'server=mpilgrim;database=master;uid=sa;pwd=secret'

 

 
字典常见操作

len(params) #键值对的个数

 

params.keys() 或 dict.keys(params) #返回key的列表

if "uid" in params.keys(): #判断是否存在某个key

    print("yes")

params.values() #返回value的列表

 

14.元组(类似列表,不可变)

列表可以增删改,元组不能改

tup1 = (); #空元组

例:

>>> tup1 = (50)

>>> type(tup1)     # 不加逗号,类型为整型

# 执行结果:

<class 'int'>

 

>>> tup1 = (50,)

>>> type(tup1)     # 加上逗号,类型为元组

# 执行结果:

<class 'tuple'>

 

访问:

例:

tup1 = ('Google', 'Baidu', 1997, 2000)

tup2 = (1, 2, 3, 4, 5, 6, 7 )

 

print ("tup1[0]: ",tup1[0])

# 执行结果:

tup1[0]:  Google

 

print ("tup2[1:5]: ", tup2[1:5])

# 执行结果:

tup2[1:5]:  (2, 3, 4, 5)

 

修改:

例:

tup1 = (12, 34.56);

tup2 = ('abc', 'xyz')

 

# 以下修改元组元素操作是非法的。

# tup1[0] = 100

 

# 创建一个新的元组

tup3 = tup1 + tup2;

print (tup3) #(12, 34.56, 'abc', 'xyz')

 

删除

tup = ('Google', 'Baidu', 1997, 2000)

 

print (tup)

del tup;

 

类似拆包

a = (11,12)

b = a

b #out (11,12)

c,d = a #类似拆包

c #out 11

d #out 12

 

例:

info = {"name":"ysw", "age":24}

for temp in info:

    print(temp)

# 执行结果:

name

 age

 

for temp in info.items():

    print("key=%s,value=%s"%(temp[0],temp[1]))

#or(或者)

for a,b in info.items():

    print("key=%s,value=%s"%(a,b))

# 执行结果

key=name,value=ysw
key=age,value=24

 

遍历技巧

一、在字典中遍历时,关键字和对应的值可以使用 items() 方法同时解读出来

knights = {'gallahad': 'the pure', 'robin': 'the brave'}

for k, v in knights.items():

          print(k, v)

 

# 执行结果:

gallahad the pure

robin the brave

 

二、在序列中遍历时,索引位置和对应值可以使用 enumerate() 函数同时得到

>>> for i, v in enumerate(['tic', 'tac', 'toe']):

...     print(i, v)

 

# 执行结果:

0 tic

1 tac

2 toe

 

三、同时遍历两个或更多的序列,可以使用 zip() 组合

>>> questions = ['name', 'quest', 'favorite color']

>>> answers = ['lancelot', 'the holy grail', 'blue']

>>> for q, a in zip(questions, answers):

...     print('What is your {0}?  It is {1}.'.format(q, a))

...

# 执行结果:

What is your name?  It is lancelot.

What is your quest?  It is the holy grail.

What is your favorite color?  It is blue.

 

四、要反向遍历一个序列,首先指定这个序列,然后调用 reversed() 函数

>>> for i in reversed(range(1, 10, 2)):

...     print(i)

...

# 执行结果:

9

7

5

3

1

 

五、要按顺序遍历一个序列,使用 sorted() 函数返回一个已排序的序列,并不修改原值

>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']

>>> for f in sorted(set(basket)):

...     print(f)

...

# 执行结果:

apple

banana

orange

pear

 

15.函数

def abc():

    print("")

 

abc()

#注意: 函数的定义需要在函数的调用之前,否则报错。

可更改与不可更改对象: 
在python中,strings,tuples和numbers是不可更改对象,list.dict等则是可更改对象。 

  • 不可变类型:变量赋值 a=5后在赋值a=10,生成了新的对象,原对象丢弃。 
  • 可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

python 函数的参数传递: 

  • 不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身 
  • 可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

 

一、默认函数参数 

def printinfo( name, age = 35 ):

   "打印任何传入的字符串"

   print ("名字: ", name);

   print ("年龄: ", age);

   return;

 

printinfo( age=50, name="baidu" );

print ("------------------------")

printinfo( name="baidu" );

 

 # 执行结果:

名字:  baidu

年龄:  50


名字:  baidu

年龄:  35

 

二、可变参数

例:

def printinfo( *vartuple ):

   "打印任何传入的参数"

   print ("输出: ")

   for var in vartuple:

      print (var)

   return;

 

printinfo(10,32,22)

 

#匿名函数(lambda创建匿名函数)

 

sum = lambda arg1, arg2: arg1 + arg2;

 

print ("相加后的值为 : ", sum( 10, 20 ))

print ("相加后的值为 : ", sum( 20, 20 ))

 

# 执行结果:

输出:
10
32
22
相加后的值为 : 30
相加后的值为 : 40

 

三、global关键字修改外部作用域变量

例:

num = 1

def fun1():

    global num  # 需要使用 global 关键字声明

    print(num)

    num = 123

    print(num)

fun1()

#  执行结果:

1

123

 

四、nonlocal 修改嵌套作用域变量

例:

def outer():

    num = 10

    def inner():

        nonlocal num   # nonlocal关键字声明

        num = 100

        print(num)

    inner()

    print(num)

outer()

 

# 执行结果:

100

100

 

16.迭代器和生成器

一、字符串,列表和元组对象都可用于创建迭代器。

例:

list = [1,2,3,4]

it = iter(list)

print(next(it)) 

print(next(it)) 

 

#执行结果

1

2

 

for x in it:  #遍历

    print(x, end = "")

#执行结果:

1 2 3 4

 

 例:

import sys

list = [1,2,3,4]

it = iter(list)

while True:

    try:

        print(next(it))

    except StopIteration:

        sys.exit()

# 执行结果:

1

2

3

4

 

二、生成器(TODO) 

yield 的函数,生成器是返回迭代器的函数,只能用于迭代操作。

例:

import sys

 

def fibonacci(n): # 生成器函数 - 斐波那契

    a, b, counter = 0, 1, 0

    while True:

        if (counter > n):

            return

        yield a               # 相当于generator的print(a)

        a, b = b, a + b   # 注意,赋值语句相当于:t = (b,a+b), t 是一个tuple,a = t[0] , b = t[1]

        counter += 1

f = fibonacci(10) # f 是一个迭代器,由生成器返回生成

 

while True:

    try:

        print (next(f), end=" ")

    except StopIteration:

        sys.exit()

 

#执行结果:

0 1 1 2 3 5 8 13 21 34 55

 

17.模块

 Python 提供了一个办法,把某些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块。 

  • import语句,想使用 Python 源文件,只需在另一个源文件里执行 import 语句。

例:

#!/usr/bin/python3

# Filename: support.py

 

def print_func( par ):

    print ("Hello : ", par)

    return

 

#!/usr/bin/python3

# Filename: test.py

 

 

import support #导入模块,即文件名

 

# 现在可以调用模块里包含的函数了

support.print_func()

 

from…import语句,从模块中导入一个指定的部分到当前命名空间中。

#导入模块 fibo 的 fib 函数

from fibo import fib, fib2

>>> fib(500)

  • From…import* 语句,把一个模块的所有内容全都导入到当前的命名空间。
  • 模块除了方法定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入时才会被执行。
  • name属性,一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,可以用name属性。

例:

#!/usr/bin/python3

# Filename: using_name.py

 

if __name__ == '__main__':

   print('程序自身在运行')

else:

   print('我来自另一模块')

 

#执行结果:

程序自身在运行

 

  • Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。
  • 目录只有包含一个叫做 init.py 的文件才会被认作是一个包,主要是为了避免一些滥俗的名字(比如叫做 string)不小心的影响搜索路径中的有效模块。
  • 推荐:from Package import specific_submodule

18.文件

open()方法返回文件,第二个参数为文件打开方式。默认只读r / 写w,a追加…

f = open("/tmp/test.txt","w")

 

f.write("人生苦短,我用python!")

 

f.close()

  • f.read(size) 读取文件内容,size为空或负数则全部返回。
  • f.readline() 会从文件中读取单独的一行。换行符为 ‘n’。f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行。
  • f.readlines() 读取文件所有行,并以列表返回。
  • f.write(string) 将 string 写入到文件中, 然后返回写入的字符数。如果要写入一些不是字符串的东西, 那么将需要先进行转换。

19.类

类方法

例:

class MyClass:

    i = 12345

    #类方法必须有一个额外的第一个参数,惯例是self,不固定;代表的的类的实例而非类

    def f(self):

        return "hello world"

 

x = MyClass()

print("MyClass 类的属性 i 为:", x.i)

print("MyClass 类的方法 f 输出为:", x.f())

 

#执行结果:

MyClass 类的属性 i 为: 12345
MyClass 类的方法 f 输出为: hello world

 

构造方法

例:

class Complex:

    #构造方法

    def __init__(self, realpart, imagpart):

        self.r = realpart

        self.i = imagpart

x = Complex(3.0, -4.5)

print(x.r, x.i)  

 

# 执行结果:

3.0 -4.5

 

例: 

类定义

class people:

    #定义基本属性

    name = ''

    age = 0

    #定义私有属性,私有属性在类外部无法直接进行访问

    __weight = 0

#定义构造方法

    def __init__(self,n,a,w):

        self.name = n

        self.age = a

        self.__weight = w

    def speak(self):

        print("%s 说: 我 %d 岁。" %(self.name,self.age))

 

# 实例化类

p = people('baidu',10,30)

p.speak()

 

 # 执行结果:

baidu 说: 我 10 岁。

 

继承

例:

类定义

class people:

    #定义基本属性

    name = ''

    age = 0

    #定义私有属性,私有属性在类外部无法直接进行访问

    __weight = 0

    #定义构造方法

    def __init__(self,n,a,w):

        self.name = n

        self.age = a

        self.__weight = w

    def speak(self):

        print("%s 说: 我 %d 岁。" %(self.name,self.age))

 

#单继承示例

class student(people):

    grade = ''

    def __init__(self,n,a,w,g):

        #调用父类的构函

        people.__init__(self,n,a,w)

        self.grade = g

    #覆写父类的方法

    def speak(self):

        print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))

 

#另一个类,多重继承之前的准备

class speaker():

    topic = ''

    name = ''

    def __init__(self,n,t):

        self.name = n

        self.topic = t

    def speak(self):

        print("我叫 %s,我是一个演说家,我演讲的主题是 %s"%(self.name,self.topic))

 

#多重继承

class sample(speaker,student):

    a =''

    def __init__(self,n,a,w,g,t):

        student.__init__(self,n,a,w,g)

        speaker.__init__(self,n,t)

 

test = sample("frank",25,80,4,"Python")

test.speak()   #方法名同,默认调用的是在括号中排前地父类的方法

 

# 执行结果:

我叫 frank,我是一个演说家,我演讲的主题是 Python

 

20.正则表达式

      re.match与re.search的区别 
      re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

例:

import re

 

line = "Cats are smarter than dogs";

matchObj = re.match( r'dogs', line, re.M|re.I)

if matchObj:

   print ("match --> matchObj.group() : ", matchObj.group())

else:

   print ("No match!!")

 #执行结果

   No match!!

 

例:

import re

 

line = "Cats are smarter than dogs";

matchObj = re.search( r'dogs', line, re.M|re.I)

if matchObj:

   print ("search --> matchObj.group() : ", matchObj.group())

else:

   print ("No match!!")

 #执行结果

   search --> matchObj.group() :  dogs

 

检索和替换

例:

import re

phone = "2018-666-666 # 这是一个电话号码" 

num = re.sub(r'#.*$', "", phone)   # 删除“#”后面的注释内容

print ("电话号码 : ", num)

 

#执行结果

电话号码 :  2018-666-666 

 

例:

import re

phone = "2018-666-666 # 这是一个电话号码" 

num = re.sub(r'D', "", phone) # 移除非数字的内容

print ("电话号码 : ", num)

 

#执行结果

电话号码 :  2018666666

 

最后用一张图来概括:

图片 2

Python3 字典

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

d = {key1 : value1, key2 : value2 }

键必须是唯一的,但值则不必。

值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

一个简单的字典实例:

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

也可如此创建字典:

dict1 = { 'abc': 456 };

dict2 = { 'abc': 123, 98.6: 37 };

 

访问字典里的值

把相应的键放入熟悉的方括弧,如下实例:

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])

执行结果:

dict['Name']:  Runoob

dict['Age']:  7

 

如果用字典里没有的键访问数据,会输出错误。

 

 

 

修改字典

向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例:

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
dict['Age'] = 8;               # 更新 Age dict['School'] = "菜鸟教程"  *# 添加信息
*print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])

执行结果:

dict['Age']:  8

dict['School']:  菜鸟教程

 

删除字典元素

能删单一的元素也能清空字典,清空只需一项操作。

显示删除一个字典用del命令,如下实例:

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
del dict['Name'] # 删除键 'Name' dict.clear()     # 删除字典
**
del dict         # 删除字典 print ("dict['Age']: ", dict['Age'])
print (
"dict['School']: ", dict['School'**])

执行结果:

Traceback (most recent call last):

  File "C:/Users/X230/Desktop/usr/1021.py", line 5, in <module>

    print ("dict['Age']: ", dict['Age'])

TypeError: 'type' object is not subscriptable

 

Process finished with exit code 1

 

字典键的特性

字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。

两个重要的点需要记住:

1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:

dict = {'Name': 'Runoob', 'Age': 7, 'Name': '小菜鸟'}
print ("dict['Name']: ", dict['Name'])

执行结果:

dict['Name']:  小菜鸟

 

2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行,如下实例:

dict = {['Name']: 'Runoob', 'Age': 7}
print ("dict['Name']: ", dict['Name'])

执行结果:

Traceback (most recent call last):

  File "C:/Users/X230/Desktop/usr/1021.py", line 1, in <module>

    dict = {['Name']: 'Runoob', 'Age': 7}

TypeError: unhashable type: 'list'

 

Process finished with exit code 1

 

Python字典包含了以下内置函数:

序号

函数及描述

实例

1

len(dict)
计算字典元素个数,即键的总数。

>>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

>>> len(dict)

3

2

str(dict)
输出字典,以可打印的字符串表示。

>>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

>>> str(dict)

"{'Name': 'Runoob', 'Class': 'First', 'Age': 7}"

3

type(variable)
返回输入的变量类型,如果变量是字典就返回字典类型。

>>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

>>> type(dict)

<class 'dict'>

 

Python字典包含了以下内置方法:

序号

函数及描述

1

radiansdict.clear()
删除字典内所有元素

2

radiansdict.copy()
返回一个字典的浅复制

3

radiansdict.fromkeys()
创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值

4

radiansdict.get(key, default=None)
返回指定键的值,如果值不在字典中返回default值

5

key in dict
如果键在字典dict里返回true,否则返回false

6

radiansdict.items()
以列表返回可遍历的(键, 值) 元组数组

7

radiansdict.keys()
以列表返回一个字典所有的键

8

radiansdict.setdefault(key, default=None)
和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default

9

radiansdict.update(dict2)
把字典dict2的键/值对更新到dict里

10

radiansdict.values()
以列表返回字典中的所有值

11

pop(key[,default])
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。

12

popitem()
随机返回并删除字典中的一对键和值(一般删除末尾对)。

 

字典的键值是"只读"的,所以不能对键和值分别进行初始化。

字典是支持无限极嵌套的,如下面代码:

citys={
    '北京':{
        '朝阳':['国贸','CBD','天阶','我爱我家','链接地产'],
        '海淀':['圆明园','苏州街','中关村','北京大学'],
        '昌平':['沙河','南口','小汤山',],
        '怀柔':['桃花','梅花','大山'],
        '密云':['密云A','密云B','密云C']
    },
    '河北':{
        '石家庄':['石家庄A','石家庄B','石家庄C','石家庄D','石家庄E'],
        '张家口':['张家口A','张家口B','张家口C'],
        '承德':['承德A','承德B','承德C','承德D']
    }
}
for i in citys['北京']:
    print(i)
for i in citys['北京']['海淀']:
    print("第二个循环输出结果:",i)

执行结果:

朝阳

海淀

昌平

怀柔

密云

第二个循环输出结果: 圆明园

第二个循环输出结果: 苏州街

第二个循环输出结果: 中关村

第二个循环输出结果: 北京大学

 

 

mycompany
├─ __init__.py
├─ abc.py
└─ xyz.py

Python3 函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

 

定义一个函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。

任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。

函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

函数内容以冒号起始,并且缩进。

return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

 

语法

Python 定义函数使用 def 关键字,一般格式如下:

def 函数名(参数列表):

    函数体

默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。

实例

让我们使用函数来输出"Hello World!":

def hello() :
   print("Hello World!")

hello()

执行结果:

Hello World!

更复杂点的应用,函数中带上参数变量:

def area(width, height):
    return width * height

def print_welcome(name):
    print("Welcome", name)

print_welcome("Runoob")
w = 4
h = 5
print("width =", w, " height =", h, " area =", area(w, h))

执行结果:

Welcome Runoob

width = 4  height = 5  area = 20

 

函数调用

定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。

如下实例调用了 printme() 函数:

# 定义函数
**
def printme(str):
    "打印任何传入的字符串"     print(str);     
return;
# 调用函数 printme(
"我要调用用户自定义函数!")
printme(
"再次调用同一函数"**)

执行结果:

我要调用用户自定义函数!

再次调用同一函数

 

在 python 中,类型属于对象,变量是没有类型的

可更改(mutable)与不可更改(immutable)对象

在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。

不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。

可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

 

python 函数的参数传递:

不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

 

python 传不可变对象实例

def ChangeInt( a ):
    a = 10

b = 2
ChangeInt(b)
print( b ) # 结果是 2

实例中有 int 对象 2,指向它的变量是 b,在传递给 ChangeInt 函数时,按传值的方式复制了变量 b,a 和 b 都指向了同一个 Int 对象,在 a=10 时,则新生成一个 int 值对象 10,并让 a 指向它。

 

传可变对象实例

可变对象在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。例如:

# 可写函数说明
**
def changeme(mylist):
    "修改传入的列表"     mylist.append([1, 2, 3, 4]);
    print(
"函数内取值: ", mylist)     return
# 调用changeme函数 mylist = [10, 20, 30];
changeme(mylist);
print(
"函数外取值: "**, mylist)

执行结果:

函数内取值:  [10, 20, 30, [1, 2, 3, 4]]

函数外取值:  [10, 20, 30, [1, 2, 3, 4]]

 

参数

以下是调用函数时可使用的正式参数类型:

必需参数

关键字参数

默认参数

不定长参数

 

必需参数

必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

调用printme()函数,你必须传入一个参数,不然会出现语法错误。

 

关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。

使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

以下实例中演示了函数参数的使用不需要使用指定顺序:

# 可写函数说明
**
def printinfo(name, age):
    "打印任何传入的字符串"     print(
"名字: ", name);
    print(
"年龄: ", age);     return;
# 调用printinfo函数 printinfo(age=50, name=
"runoob")
printinfo(50,
'kobe')
printinfo(
'allen'**,50)

执行结果:

名字:  runoob

年龄:  50

名字:  50

年龄:  kobe

名字:  allen

年龄:  50

 

默认参数

调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 age 参数,则使用默认值。默认参数必须放在最后面,否则会报错

##可写函数说明
**
def printinfo( name, age = 35 ):
   "打印任何传入的字符串"    print (
"名字: ", name);
   print (
"年龄: ", age);    return;
 #调用printinfo函数 printinfo( age=50, name=
"runoob" );
print (
"------------------------")
printinfo( name=
"runoob"** );

执行结果:

名字:  runoob

年龄:  50


名字:  runoob

年龄:  35

 

不定长参数

你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。基本语法如下:

def functionname([formal_args,] *var_args_tuple ):
   "函数_文档字符串"    function_suite
   return [expression]

加了星号(*)的变量名会存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。如下实例:

# 可写函数说明
**
def printinfo(arg1, *vartuple):
    "打印任何传入的参数"     print(
"输出: ")
    print(arg1)     
for var in vartuple:
        print(var)     
return*; # 调用printinfo 函数
*printinfo(10);
printinfo(70, 60, 50);

执行结果:

输出:

10

输出:

70

60

50

 

匿名函数

python 使用 lambda 来创建匿名函数。

所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

lambda 只是一个表达式,函数体比 def 简单很多。

lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

 

语法

lambda 函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

 

如下实例:

# 可写函数说明 sum = lambda arg1, arg2: arg1 + arg2;
# 调用sum函数 print("相加后的值为 : ", sum(10, 20))
print("相加后的值为 : ", sum(20, 20))

执行结果:

相加后的值为 :  30

相加后的值为 :  40

 

return语句

return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,以下实例演示了 return 语句的用法:

# 可写函数说明
**
def sum( arg1, arg2 ):
   # 返回2个参数的和."    total = arg1 + arg2
   print (
"函数内 : ", total)    return total;
# 调用sum函数 total = sum( 10, 20 );
print (
"函数外 : "**, total)

执行结果:

函数内 :  30

函数外 :  30

 

变量作用域

Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。

变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:

L (Local) 局部作用域

E (Enclosing) 闭包函数外的函数中

G (Global) 全局作用域

B (Built-in) 内建作用域

以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

x = int(2.9)  # 内建作用域 g_count = 0  # 全局作用域
**
def* outer():
    o_count = 1  
# 闭包函数外的函数中

    *def inner():
        i_count = 2  # 局部作用域

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这这些语句内定义的变量,外部也可以访问。

如果将 变量msg 定义在函数中,则它就是局部变量,外部不能访问:

>>> def test():

...     msg_inner = 'I am from Runoob'

...

>>> msg_inner

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

NameError: name 'msg_inner' is not defined

从报错的信息上看,说明了 msg_inner 未定义,无法使用,因为它是局部变量,只有在函数内可以使用。

全局变量和局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:

 

total = 0; # 这是一个全局变量

# 可写函数说明

def sum( arg1, arg2 ):

    #返回2个参数的和."

    total = arg1 + arg2; # total在这里是局部变量.

    print ("函数内是局部变量 : ", total)

    return total;

 

#调用sum函数

sum( 10, 20 );

print ("函数外是全局变量 : ", total)

以上实例输出结果:

函数内是局部变量 :  30

函数外是全局变量 :  0

 

global 和 nonlocal关键字

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。

以下实例修改全局变量 num:

 

num = 1

def fun1():

    global num  # 需要使用 global 关键字声明

    print(num)

    num = 123

    print(num)

fun1()

以上实例输出结果:

1

123

 

如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:

 

def outer():

    num = 10

    def inner():

        nonlocal num   # nonlocal关键字声明

        num = 100

        print(num)

    inner()

    print(num)

outer()

以上实例输出结果:

100

100

 

另外有一种特殊情况,假设下面这段代码被运行:

 

a = 10

def test():

    a = a + 1

    print(a)

test()

以上程序执行,报错信息如下:

Traceback (most recent call last):

  File "test.py", line 7, in <module>

    test()

  File "test.py", line 5, in test

    a = a + 1

UnboundLocalError: local variable 'a' referenced before assignment

错误信息为局部作用域引用错误,因为 test 函数中的 a 使用的是局部,未定义,无法修改。

 

def(**kwargs) 把N个关键字参数转化为字典:

>>> def func(country,province,**kwargs):

...       print(country,province,kwargs)

...

>>> func("China","Sichuan",city = "Chengdu", section = "JingJiang")

China Sichuan {'city': 'Chengdu', 'section': 'JingJiang'}

 

lambda 匿名函数也是可以使用"关键字参数"进行参数传递

>>> g= lambda x,y : x**2+y**2

>>> g(2,3)

13

>>> g(y=3,x=2)

13

同样地,lambda 匿名函数也可以设定默认值

>>> g= lambda x=0,y=0 : x**2+y**2

>>> g(2,3)

13

>>> g(2)

4

>>> g(y=3)

9

注意:如果只打算给其中一部分参数设定默认值,那么应当将其放在靠后的位置(和定义函数时一样,避免歧义),否则会报错。

 

全局变量和局部变量和 js 有一些相似

>>> b=1

>>> def ss(a):

...     c=a+b

...     print(c)

...

>>> print(b)

1

>>> ss(10)

11

说明:

b 在 ss(a) 函数外定义,在函数内部可以直接使用,和本教程中的最后一个例子有差别。

在 js 中也是可以直接使用函数外部的变量,只不过外部变量需要使用 var 声明。

 

 

类似的,可以有多级目录,组成多级层次的包结构。比如如下的目录结构:

Python3 运算符

什么是运算符?

本章节主要说明Python的运算符。举个简单的例子 4 +5 = 9 。 例子中,4 和 5 被称为操作数,"+" 称为运算符。

Python语言支持以下类型的运算符:

算术运算符

比较(关系)运算符

赋值运算符

逻辑运算符

位运算符

成员运算符

身份运算符

运算符优先级

接下来让我们一个个来学习Python的运算符。

import package

Python3 编程第一步

在前面的教程中我们已经学习了一些 Python3 的基本语法知识,下面我们尝试来写一个斐波纳契数列。实例如下:

# Fibonacci series: 斐波纳契数列# 两个元素的总和确定了下一个数f(n)==f(n-1)+f(n-2)

a, b = 0, 1

while b < 10:

    print(b)

    a, b = b, a+b

执行以上程序,输出结果为:

1

1

2

3

5

8

这个例子介绍了几个新特征。

第一行包含了一个复合赋值:变量 a 和 b 同时得到新值 0 和 1。最后一行再次使用了同样的方法,可以看到,右边的表达式会在赋值变动之前执行。右边表达式的执行顺序是从左往右的。

 

输出变量值:

>>> i = 256*256

>>> print('i 的值为:', i)

i 的值为: 65536

 

end 关键字

关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,实例如下:

# Fibonacci series: 斐波纳契数列# 两个元素的总和确定了下一个数

a, b = 0, 1

while b < 1000:

    print(b, end=',')

    a, b = b, a+b

执行以上程序,输出结果为:

1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,

斐波纳契函数用递归函数解法如下:

def fbnq(n):
    if n <1:
        print("输入有误!")
        return -1
    if n == 1 or n == 2:
        return 1
    else:
        return fbnq(n-1) + fbnq(n-2)
print(fbnq(30))

Python3 条件控制:

Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。

可以通过下图来简单了解条件语句的执行过程:

 

if 语句

Python中if语句的一般形式如下所示:

if condition_1:

statement_block_1

elif condition_2:

statement_block_2

else:

statement_block_3

如果 "condition_1" 为 True 将执行 "statement_block_1" 块语句

如果 "condition_1" 为False,将判断 "condition_2"

如果"condition_2" 为 True 将执行 "statement_block_2" 块语句

如果 "condition_2" 为False,将执行"statement_block_3"块语句

Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else。

注意:

1、每个条件后面要使用冒号(:),表示接下来是满足条件后要执行的语句块。

2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。

3、在Python中没有switch – case语句。

 

 

 

 

以下是一个简单的 if 实例:

var1 = 100

if var1:

print ("1 - if 表达式条件为 true")

print (var1)

 

var2 = 0

if var2:

print ("2 - if 表达式条件为 true")

print (var2)

print ("Good bye!")

执行以上代码,输出结果为:

1 - if 表达式条件为 true

100

Good bye!

从结果可以看到由于变量 var2 为 0,所以对应的 if 内的语句没有执行。

 

以下实例演示了狗的年龄计算判断:

age = int(input("请输入你家狗狗的年龄: "))

print("")

if age < 0:

print("你是在逗我吧!")

elif age == 1:

print("相当于 14 岁的人。")

elif age == 2:

print("相当于 22 岁的人。")

elif age > 2:

human = 22 + (age -2)*5

print("对应人类年龄: ", human)

 

### 退出提示

input("点击 enter 键退出")

执行结果如下:

请输入你家狗狗的年龄: 1

 

相当于 14 岁的人。

点击 enter 键退出

 

 

 

 

 

 

 

以下为if中常用的操作运算符:

操作符

描述

<

小于

<=

小于或等于

>

大于

>=

大于或等于

==

等于,比较对象是否相等

!=

不等于

数字猜谜游戏

number = 7

guess = -1

print("数字猜谜游戏!")

while guess != number:

guess = int(input("请输入你猜的数字:"))

 if guess == number:

print("恭喜,你猜对了!")

elif guess < number:

print("猜的数字小了...")

elif guess > number:

print("猜的数字大了...")

执行以上脚本,实例输出结果如下:

数字猜谜游戏!

请输入你猜的数字:1

猜的数字小了...

请输入你猜的数字:9

猜的数字大了...

请输入你猜的数字:7

恭喜,你猜对了!

 

if 嵌套

在嵌套 if 语句中,可以把 if...elif...else 结构放在另外一个 if...elif...else 结构中。

if 表达式1:

    语句

    if 表达式2:

        语句

    elif 表达式3:

        语句

    else:

        语句

elif 表达式4:

    语句

else:

    语句

 

实例

num=int(input("输入一个数字:"))

if num%2==0:

if num%3==0:

print ("你输入的数字可以整除 2 和 3")

else:

 print ("你输入的数字可以整除 2,但不能整除 3")

else:

if num%3==0:

print ("你输入的数字可以整除 3,但不能整除 2")

else:

 print ("你输入的数字不能整除 2 和 3")

将以上程序保存到 test_if.py 文件中,执行后输出结果为:

输入一个数字:6

你输入的数字可以整除 2 和 3

 

对上例进行更改1:

i = 5
while i:
    num =int(input("请输入一个整数:"))
    if num % 2 ==0:
        if num % 3 == 0:
            print("你输入的数字能同时被2和3整除。")
        else:
            print("你输入的数字只能被2整除,不能被3整除。")
    else:
        if num % 3 == 0:
            print("你输入的数字能被3整,但不能被2整除。")
        else:
            print("你输入的数字不能被2也不能被3整除。")
    i-=1 #可以进行5次操作

 

实例1:

import random

x = random.choice(range(100))   # x取1-100随机数
y = random.choice(range(200))   # y取1-200随机数
if x > y:
    print('x:',x,'y:',y)
elif x == y:
    print('x+y', x + y,'x:',x,'y:',y)
else:
    print('y:',y,'x:',x)      #  x,y进行大小比较

 

实例2:

print("=======欢迎进入狗狗年龄对比系统========")
while True:
    try:
        age = int(input("请输入您家狗的年龄:"))
        print(" ")
        age = float(age)
        if age < 0:
            print("您在逗我?")
        elif age == 1:
            print("相当于人类14岁")
            break
        elif
age == 2:
            print("相当于人类22岁")
            break
        else
:
            human = 22 + (age - 2)*5
            print("相当于人类:",human)
            break
    except
ValueError:
        print("输入不合法,请输入有效年龄")
###退出提示 input("点击 enter 键退出")

 

实例3:

print('数字猜谜游戏')
print('数字猜谜游戏!')

a = 1
i = 0
while a != 20:
   a = int (input ('请输入你猜的数字:'))
   i += 1
   if a == 20:
      if i<3:
         print('真厉害,这么快就猜对了!')
      else :
         print('总算猜对了,恭喜恭喜!')
   elif a < 20:
      print('你猜的数字小了,不要灰心,继续努力!')
   else :
      print('你猜的数字大了,不要灰心,继续加油!')

 

Import 模块名

 

你也许还想到,如果不同的人编写的模块名相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。

执行结果:

已更新字符串 :  Hello Runoob!

 

Python转义字符

在需要在字符中使用特殊字符时,python用反斜杠()转义字符。如下表:

转义字符

描述

(在行尾时)

续行符

\

反斜杠符号

'

单引号

"

双引号

a

响铃

b

退格(Backspace)

e

转义

00

n

换行

v

纵向制表符

t

横向制表符

r

回车

f

换页

oyy

八进制数,yy代表的字符,例如:o12代表换行

xyy

十六进制数,yy代表的字符,例如:x0a代表换行

other

其它的字符以普通格式输出

 

Python字符串运算符

下表实例变量a值为字符串 "Hello",b变量值为 "Python":

操作符

描述

实例

+

字符串连接

a + b 输出结果: HelloPython

*

重复输出字符串

a*2 输出结果:HelloHello

[]

通过索引获取字符串中字符

a[1] 输出结果 e

[ : ]

截取字符串中的一部分

a[1:4] 输出结果 ell

in

成员运算符 - 如果字符串中包含给定的字符返回 True

H in a 输出结果 1

not in

成员运算符 - 如果字符串中不包含给定的字符返回 True

M not in a 输出结果 1

r/R

原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。

print r'n' prints n 和 

print R'n' prints n

%

格式字符串

请看下一节内容。

 

a = "Hello" b = "Python" print("a + b 输出结果:", a + b)
print("a * 2 输出结果:", a * 2)
print("a[1] 输出结果:", a[1])
print("a[1:4] 输出结果:", a[1:4])
if ("H" in a):
    print("H 在变量 a 中")
else:
    print("H 不在变量 a 中")

if ("M" not in a):
    print("M 不在变量 a 中")
else:
    print("M 在变量 a 中")

print(r'n')
print(R'n')

执行结果:

a + b 输出结果: HelloPython

a * 2 输出结果: HelloHello

a[1] 输出结果: e

a[1:4] 输出结果: ell

H 在变量 a 中

M 不在变量 a 中

n

n

 

Python字符串格式化

Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。

在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。

print ("我叫 %s 今年 %d 岁!" % ('小明', 10))

执行结果:

我叫 小明 今年 10 岁!

 

python字符串格式化符号:

    符   号

描述

      %c

 格式化字符及其ASCII码

      %s

 格式化字符串

      %d

 格式化整数

      %u

 格式化无符号整型

      %o

 格式化无符号八进制数

      %x

 格式化无符号十六进制数

      %X

 格式化无符号十六进制数(大写)

      %f

 格式化浮点数字,可指定小数点后的精度

      %e

 用科学计数法格式化浮点数

      %E

 作用同%e,用科学计数法格式化浮点数

      %g

 %f和%e的简写

      %G

 %f 和 %E 的简写

      %p

 用十六进制数格式化变量的地址

 

格式化操作符辅助指令:

符号

功能

*

定义宽度或者小数点精度

-

用做左对齐

+

在正数前面显示加号( + )

<sp>

在正数前面显示空格

#

在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')

0

显示的数字前面填充'0'而不是默认的空格

%

'%%'输出一个单一的'%'

(var)

映射变量(字典参数)

m.n.

m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

 

Python三引号

python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。实例如下

para_str = """这是一个多行字符串的实例
多行字符串可以使用制表符
TAB (
t )。
也可以使用换行符 [
n ]。
"""
print (para_str)

执行结果:

这是一个多行字符串的实例

多行字符串可以使用制表符

TAB (  )。

也可以使用换行符 [

 ]。

 

三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。

一个典型的用例是,当你需要一块HTML或者SQL时,这时用字符串组合,特殊字符串转义将会非常的繁琐。

 

Unicode 字符串

在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。

在Python3中,所有的字符串都是Unicode字符串。

 

Python 的字符串内建函数

Python 的字符串常用内建函数如下:

序号

方法及描述

1

capitalize()
将字符串的第一个字符转换为大写

2

center(width, fillchar)


返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。

3

count(str, beg= 0,end=len(string))


返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数

4

bytes.decode(encoding="utf-8", errors="strict")


Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。

5

encode(encoding='UTF-8',errors='strict')


以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'

6

endswith(suffix, beg=0, end=len(string))
检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.

7

expandtabs(tabsize=8)


把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。

8

find(str, beg=0 end=len(string))


检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1

9

index(str, beg=0, end=len(string))


跟find()方法一样,只不过如果str不在字符串中会报一个异常.

10

isalnum()


如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False

11

isalpha()


如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False

12

isdigit()


如果字符串只包含数字则返回 True 否则返回 False..

13

islower()


如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False

14

isnumeric()


如果字符串中只包含数字字符,则返回 True,否则返回 False

15

isspace()


如果字符串中只包含空白,则返回 True,否则返回 False.

16

istitle()


如果字符串是标题化的(见 title())则返回 True,否则返回 False

17

isupper()


如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False

18

join(seq)


以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

19

len(string)


返回字符串长度

20

ljust(width[, fillchar])


返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。

21

lower()


转换字符串中所有大写字符为小写.

22

lstrip()


截掉字符串左边的空格或指定字符。

23

maketrans()


创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。

24

max(str)


返回字符串 str 中最大的字母。

25

min(str)


返回字符串 str 中最小的字母。

26

replace(old, new [, max])


把 将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。

27

rfind(str, beg=0,end=len(string))


类似于 find()函数,不过是从右边开始查找.

28

rindex( str, beg=0, end=len(string))


类似于 index(),不过是从右边开始.

29

rjust(width,[, fillchar])


返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串

30

rstrip()


删除字符串字符串末尾的空格.

31

split(str="", num=string.count(str))


num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num 个子字符串

32

splitlines([keepends])


按照行('r', 'rn', n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。

33

startswith(str, beg=0,end=len(string))


检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。

34

strip([chars])


在字符串上执行 lstrip()和 rstrip()

35

swapcase()


将字符串中大写转换为小写,小写转换为大写

36

title()


返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())

37

translate(table, deletechars="")


根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中

38

upper()


转换字符串中的小写字母为大写

39

zfill (width)


返回长度为 width 的字符串,原字符串右对齐,前面填充0

40

isdecimal()


检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。

 

字符串截取字符补充:

# 0、a,b为数字参数。从字符串指针为a的地方开始截取字符,到b的前一个位置(因为不包含b)

var1 = "hello world";

print(var1[a: b]);

 

# 1、如果a,b均不填写,默认取全部字符。即,下面这两个打印结果是一样的

print(var1[: ]);  # hello world

print(var1);      # hello world

 

# 2、如果a填写,b不填写(或填写的值大于指针下标),默认从a开始截取,至字符串最后一个位置

print(var1[3: ]); # lo world

 

# 3、如果a不填写, b填写,默认从0位置开始截取,至b的前一个位置

print(var1[: 8]); # hello wo

 

# 4、如果a为负数,默认从尾部某一位置,开始向后截取

print(var1[-2: ]); # ld

 

# 5、如果a>=b, 默认输出为空。

print(var1[3: 3]);

print(var1[3: 2]);

 

python字符串格式化符号 %f 可指定小数点后的精度。

num =18.72554
print("the price  is  %.2f" %num)

执行结果:

the price  is  18.73

 

使用格式化符号进行进制转换

>>> num=10

>>> print('十六进制:%#x' % num)    #使用%x将十进制num格式化为十六进制

十六进制:0xa

>>> print('二进制:', bin(num))      #使用bin将十进制num格式化为二进制

二进制: 0b1010

>>> print('八进制:%#o' % num)      #使用%o将十进制num格式化为八进制

八进制:0o12

上面使用格式化符号进行进制转换中,多加入了一个#号,目的是在转换结果头部显示当前进制类型,如不需要,可将#号去除,如下

>>> print('八进制:%o' % num)

八进制:12

>>> print('十六进制:%x' % num)

十六进制:a

 

字符串截取字符继续补充:

[::2] 表示的是从头到尾,步长为2。第一个冒号两侧的数字是指截取字符串的范围,第二个冒号后面是指截取的步长。

>>> L=['a','b','c','d','e','f','g']

>>> print(L[::2])

['a', 'c', 'e', 'g']

 

字符串其他总结:

字符串的处理:

定义字符串a = python,则可进行如下操作

字符串全部字符大写:a.upper()

字符串小写:a.lower()

字符串首字符大写,其余字符小写:a.capitalize()

去掉字符串两边的空白符(包括n,t,r,’ ’)或去掉字符串中指定字符:

如a.strip(‘py’)   输出’thon’   

删除左边的空白符:a.lstrip()

删除右边的空白符:a.rstrip()

判断字符串是否是数字类型,是返回True,不是返回False  a.isdigit()

搜索字符串中字符的起始位置a.find()  如a.find(‘y’)   返回结果为1,如找不到返回-1

字符串替换a.replace()  a.replace(‘python’,’Java’)   结果为'java'

拆分字符串,通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)的函数:a.split()  具体如下:

a.split(str="",num=string.count(str))[n]

参数说明:
str :表示为分隔符,默认为空格,但是不能为空('')。若字符串中没有分隔符,则把整个字符串作为列表的一个元素输出至列表中。
num:表示分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋值给新的变量.

[n]:   表示选取第n个分片

注意:当使用空格作为分隔符时,对于中间为空的项会自动忽略

示例:a = “www.hao123.com.cn”

print(a.split())   结果为['www.hao123.com.cn']

print(a.split(‘.’))  结果为['www', 'hao123', 'com', 'cn']

分割一次:print(a.split(‘.’))或print(a.split(‘.’),0) 结果为:['www', 'hao123', 'com', 'cn']

分割二次:print(a.split(‘.’),1) 结果为:['www', 'hao123.com.cn']

分割二次并取列表中序列为1的值:print(a.split(‘.’),1)[1] 结果:'hao123.com.cn'

分割最大次数:print(a.split(‘.’),-1)   结果为:['www', 'hao123', 'com', 'cn']

分割最大次数后赋值:a1,a2,a3,a4 = a.split(‘.’,-1)   则a1 = ‘www’  类推。

prompt = "If you tell us who you are, we can personalize the messages you see."

prompt += "nWhat is your first name? "

sorted()  默认大小写排序   sorted(favorite_languages)

set()   例: set(favorite_languages.values()) 同一名称归类

for name, language in favorite_languages.items(): 将字典中的键命名为name,将字典中的值命名为language

import random   secret = random.randint(a,b)  导入生成随机数的模块,然后生a,b之间的数字 (包含ab)

.extend()   可同时将两个元素增加到列表中

.insert()   member.insert(1,’元素’),其中插入第一名位置为0,第二名位置为1,类推

.remove()  从列表中删除一个元素,不需要知道元素在列表中位置,必须需要知道元素名称。

.count()  显示某个元素在列表中出现的次数  示例:member.count(‘李阳’)

.index() 索引函数,返还某元素在列表中的位置

.reverse()  将列表顺序反转  如:member.reverse()

.sort()   将列表元素按从小到大顺序排列 如:member.sort()

.sort()   member.sort(reverse=True)   将列表元素按从大到小顺序排列

.sort()   sorted()  .reverse()  排序函数

 

1.注释

在 python 用 import 或者 from...import... 来导入相应的模块或模块中的功能函数。

最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。

================python from import===================================

"""

 

注意:自己创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。

导入sys模块的argv,path成员:

from sys import argv, path  # 导入特定的成员 print('================python from import===================================')
print('path:', path)  # 因为已经导入path成员,所以此处引用时不需要加sys.path

执行结果:

使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。点这里查看Python的所有内置函数。

 

from Package import specific_submodule

Python学习网站推荐

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

 

引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,abc.py模块的名字就变成了mycompany.abc,类似的,xyz.py的模块名变成了mycompany.xyz

记住:空行也是程序代码的一部分。

'''

空行:

解决:程序首行加 #coding=utf-8 或 #*-* coding:utf-8 *-*

Community 是免费的,功能也非常强大,它能帮你找出你发现不了的语法错误(很关键)

print("hello world") 

 

"""

程序好习惯编辑器,用这个不如用pycharm社区免费版

使用模块有什么好处?

Python3 元组

Python 的元组与列表类似,不同之处在于元组的元素不能修改。

元组使用小括号,列表使用方括号。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

如下实例:

tup1 = ('Google', 'Runoob', 1997, 2000);

tup2 = (1, 2, 3, 4, 5 );

tup3 = "a", "b", "c", "d";

创建空元组

tup1 = ();

元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用:

元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用:

tup1 = (50)
tup2 =(50,)
print(type(tup1))
print(type(tup2))

执行结果:

<class 'int'>

<class 'tuple'>

 

元组与字符串类似,下标索引从0开始,可以进行截取,组合等。

 

访问元组

元组可以使用下标索引来访问元组中的值,如下实例:

tup1 = ('Google', 'Runoob', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print ("tup1[0]: ", tup1[0])
print ("tup2[1:5]: ", tup2[1:5])

执行结果:

tup1[0]:  Google

tup2[1:5]:  (2, 3, 4, 5)

 

修改元组

元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:

tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# 以下修改元组元素操作是非法的。
# tup1[0] = 100
# 创建一个新的元组
tup3 = tup1 + tup2
print (tup3)

执行结果:

(12, 34.56, 'abc', 'xyz')

 

删除元组

元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,如下实例:

tup = ('Google', 'Runoob', 1997, 2000)
print (tup)
del tup[0]
print ("删除后的元组 tup : ",tup)

执行结果:

('Google', 'Runoob', 1997, 2000)

Traceback (most recent call last):

  File "C:/Users/X230/Desktop/usr/1021.py", line 3, in <module>

    del tup[0]

TypeError: 'tuple' object doesn't support item deletion

 

Process finished with exit code 1

 

元组运算符

与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。

Python 表达式

结果

描述

len((1, 2, 3))

3

计算元素个数

(1, 2, 3) + (4, 5, 6)

(1, 2, 3, 4, 5, 6)

连接

('Hi!',) * 4

('Hi!', 'Hi!', 'Hi!', 'Hi!')

复制

3 in (1, 2, 3)

True

元素是否存在

for x in (1, 2, 3): print x,

1 2 3

迭代

 

元组索引,截取

因为元组也是一个序列,所以我们可以访问元组中的指定位置的元素,也可以截取索引中的一段元素,如下所示:

元组:

L = ('Google', 'Taobao', 'Runoob')

Python 表达式

结果

描述

L[2]

'Runoob!'

读取第三个元素

L[-2]

'Taobao'

反向读取;读取倒数第二个元素

L[1:]

('Taobao', 'Runoob!')

截取元素,从第二个开始后的所有元素。

 

元组内置函数

Python元组包含了以下内置函数

序号

方法及描述

实例

1

len(tuple)
计算元组元素个数。

>>> tuple1 = ('Google', 'Runoob', 'Taobao')

>>> len(tuple1)

3

>>>

2

max(tuple)
返回元组中元素最大值。

>>> tuple2 = ('5', '4', '8')

>>> max(tuple2)

'8'

>>>

3

min(tuple)
返回元组中元素最小值。

>>> tuple2 = ('5', '4', '8')

>>> min(tuple2)

'4'

>>>

4

tuple(seq)
将列表转换为元组。

>>> list1= ['Google', 'Taobao', 'Runoob', 'Baidu']

>>> tuple1=tuple(list1)

>>> tuple1

('Google', 'Taobao', 'Runoob', 'Baidu')

 

 

请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompany

 

文件www.py的模块名就是mycompany.web.www,两个文件utils.py的模块名分别是mycompany.utilsmycompany.web.utils

以下内容为网上拷贝加上部分自己整理得来。侵删。

mycompany
 ├─ web
 │  ├─ __init__.py
 │  ├─ utils.py
 │  └─ www.py
 ├─ __init__.py
 ├─ abc.py
 └─ xyz.py

>>> keyword.kwlist

单行:# 
多行:三个'单引号'或三个"双引号"

 

python2 = assic =  不支持中文

 

将整个模块(somemodule)导入,格式为: import somemodule

将整个模块(somemodule)导入并重新命名:如import pygame as pg

将pygame模块导入并将其重命名为pg

保留字即关键字,我们不能把它们用作任何标识符或变量名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:

 

>>> import keyword

Python3 循环语句:

本章节将为大家介绍Python循环语句的使用。

Python中的循环语句有 for 和 while。

Python循环语句的控制结构图如下所示:

 

 

while 循环

Python中while语句的一般形式:

While 判断条件:

语句

同样需要注意冒号和缩进。另外,在Python中没有do..while循环。

以下实例使用了 while 来计算 1 到 100 的总和:

n = 100
sum = 0
counter = 1
while counter <= n:
    sum = sum + counter
    counter += 1
print("1 到 %d 之和为: %d" % (n, sum))

执行结果为:1 到 100 之和为: 5050

 

无限循环

我们可以通过设置条件表达式永远不为 false 来实现无限循环,实例如下:

var = 1
while var == 1:  # 表达式永远为 true     num = int(input("输入一个数字  :"))
    print("你输入的数字是: ", num)

print("Good bye!")

上述程序会一直执行。你可以使用 CTRL+C 来退出当前的无限循环。

无限循环在服务器上客户端的实时请求非常有用。

 

while 循环使用 else 语句

在 while … else 在条件语句为 false 时执行 else 的语句块:

count = 0
while count < 5:
   print (count, " 小于 5")
   count = count + 1
else:
   print (count, " 大于或等于 5")

执行结果为:

0  小于 5

1  小于 5

2  小于 5

3  小于 5

4  小于 5

5  大于或等于 5

 

简单语句组

类似if语句的语法,如果你的while循环体中只有一条语句,你可以将该语句与while写在同一行中, 如下所示:

flag = 1
while (flag): print('欢迎访问菜鸟教程!')

以上的无限循环你可以使用 CTRL+C 来中断循环。

执行以上脚本,输出结果如下:

欢迎访问菜鸟教程!

欢迎访问菜鸟教程!

欢迎访问菜鸟教程!

欢迎访问菜鸟教程!

 

for 语句

Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。

for循环的一般格式如下:

for <variable> in <sequence>:
    <statements>
else:
    <statements>

实例:

languages = ["C", "C++", "Perl", "Python"]
for x in languages:
    print(x)

执行结果:

C

C++

Perl

Python

 

以下 for 实例中使用了 break 语句,break 语句用于跳出当前循环体:

sites = ["Baidu", "Google","Runoob","Taobao"]
for site in sites:
    if site == "Runoob":
        print("菜鸟教程!")
        break              # break跳出了for循环,直接执行循环之后的print完成循环语句     print("循环数据 " + site)
else:
    print("没有循环数据!")
print("完成循环!")

执行结果如下:

循环数据 Baidu

循环数据 Google

菜鸟教程!

完成循环!

 

range()函数

如果你需要遍历数字序列,可以使用内置range()函数。它会生成数列,例如:

for i in range(5):
    print(i)

执行结果:

0

1

2

3

4

for i in range(5,9):
    print(i)

执行结果:

5

6

7

8

也可以使range以指定数字开始并指定不同的增量(甚至可以是负数,有时这也叫做'步长'):

for i in range(0,10,3):
    print(i,end=",")

执行结果:0,3,6,9,

for i in range(-10,-100,-30):
    print(i,end=",")

执行结果:-10,-40,-70,

 

您可以结合range()和len()函数以遍历一个序列的索引,如下所示:

a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ']
for i in range(len(a)):
    print(i,":",a[i])

执行结果:

0 : Google

1 : Baidu

2 : Runoob

3 : Taobao

4 : QQ

 

还可以使用range()函数来创建一个列表:

print(list(range(5)))

执行结果:[0, 1, 2, 3, 4]

 

 

break和continue语句及循环中的else子句:

break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。 实例如下:

for letter in 'Runoob':  # 第一个实例
    **
if letter == 'b':         break
    print('当前字母为 :', letter)
var = 10  # 第二个实例
while var > 0:
    print(
'当期变量值为 :', var)
    var = var - 1     
if var == 5:         break
print("Good bye!"**)

执行结果:

当前字母为 : R

当前字母为 : u

当前字母为 : n

当前字母为 : o

当前字母为 : o

当期变量值为 : 10

当期变量值为 : 9

当期变量值为 : 8

当期变量值为 : 7

当期变量值为 : 6

Good bye!

 

continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后继续进行下一轮循环。

for letter in 'Runoob':  # 第一个实例
    **
if letter == 'o':  # 字母为 o 时跳过输出         continue
    print('当前字母 :', letter)
var = 10  # 第二个实例
while var > 0:
    var = var - 1     
if var == 5:  # 变量为 5 时跳过输出         continue
    print('当前变量值 :', var)
print(
"Good bye!"**)

执行结果:

当前字母 : R

当前字母 : u

当前字母 : n

当前字母 : b

当前变量值 : 9

当前变量值 : 8

当前变量值 : 7

当前变量值 : 6

当前变量值 : 4

当前变量值 : 3

当前变量值 : 2

当前变量值 : 1

当前变量值 : 0

Good bye!

 

循环语句可以有 else 子句,它在穷尽列表(以for循环)或条件变为 false (以while循环)导致循环终止时被执行,但循环被break终止时不执行。

式例循环执行情况:

i=0
j=0
for n in range(2, 10):
    i+=1
    print("第一重循环执行第%d次;"% (i),"n 的数值为:%d" % (n))
    for x in range(2, n):
        j+=1
        print("      第二重循环执行第%d次;" % (j),"x 的数值为:%d" % (x))

执行结果:

第一重循环执行第1次; n 的数值为:2

第一重循环执行第2次; n 的数值为:3

      第二重循环执行第1次; x 的数值为:2

第一重循环执行第3次; n 的数值为:4

      第二重循环执行第2次; x 的数值为:2

      第二重循环执行第3次; x 的数值为:3

第一重循环执行第4次; n 的数值为:5

      第二重循环执行第4次; x 的数值为:2

      第二重循环执行第5次; x 的数值为:3

      第二重循环执行第6次; x 的数值为:4

第一重循环执行第5次; n 的数值为:6

      第二重循环执行第7次; x 的数值为:2

      第二重循环执行第8次; x 的数值为:3

      第二重循环执行第9次; x 的数值为:4

      第二重循环执行第10次; x 的数值为:5

第一重循环执行第6次; n 的数值为:7

      第二重循环执行第11次; x 的数值为:2

      第二重循环执行第12次; x 的数值为:3

      第二重循环执行第13次; x 的数值为:4

      第二重循环执行第14次; x 的数值为:5

      第二重循环执行第15次; x 的数值为:6

第一重循环执行第7次; n 的数值为:8

      第二重循环执行第16次; x 的数值为:2

      第二重循环执行第17次; x 的数值为:3

      第二重循环执行第18次; x 的数值为:4

      第二重循环执行第19次; x 的数值为:5

      第二重循环执行第20次; x 的数值为:6

      第二重循环执行第21次; x 的数值为:7

第一重循环执行第8次; n 的数值为:9

      第二重循环执行第22次; x 的数值为:2

      第二重循环执行第23次; x 的数值为:3

      第二重循环执行第24次; x 的数值为:4

      第二重循环执行第25次; x 的数值为:5

      第二重循环执行第26次; x 的数值为:6

      第二重循环执行第27次; x 的数值为:7

      第二重循环执行第28次; x 的数值为:8

 

 

 

 

 

如下实例用于查询质数的循环例子:

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, '等于', x, '*', n//x)
            break
    else
:
        # 循环中没有找到元素         print(n, ' 是质数')

执行结果:

2  是质数

3  是质数

4 等于 2 * 2

5  是质数

6 等于 2 * 3

7  是质数

8 等于 2 * 4

9 等于 3 * 3

 

pass 语句:

Python pass是空语句,是为了保持程序结构的完整性。

pass 不做任何事情,一般用做占位语句,如下实例

while True:

pass   # 等待键盘中断(Ctrl+C)

 

class MyEmptyClass:

pass

 

以下实例在字母为 o 时 执行 pass 语句块:

for letter in 'Runoob':
    if letter == 'o':
        pass         print('执行 pass 块')
    print('当前字母 :', letter)
print("Good bye!")

执行结果:

当前字母 : R

当前字母 : u

当前字母 : n

执行 pass 块

当前字母 : o

执行 pass 块

当前字母 : o

当前字母 : b

Good bye!

 

可以使用内置 enumerate 函数进行遍历:

for index, item in enumerate(sequence):

    process(index, item)

sequence = [12, 34, 34, 23, 45, 76, 89]
for i, j in enumerate(sequence):
    print(i,":",j)

执行结果:

0 : 12

1 : 34

2 : 34

3 : 23

4 : 45

5 : 76

6 : 89

 

使用循环嵌套来实现99乘法法则:

#外边一层循环控制行数
#i是行数
i=1
while i<=9:
     #里面一层循环控制每一行中的列数      j=1
     while j<=i:
          mut =j*i
          print("%d*%d=%d"%(j,i,mut), end="  ")
          j+=1
     print("")
     i+=1

执行结果:

1*1=1  

1*2=2  2*2=4  

1*3=3  2*3=6  3*3=9  

1*4=4  2*4=8  3*4=12  4*4=16  

1*5=5  2*5=10  3*5=15  4*5=20  5*5=25  

1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  

1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  

1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  

1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81  

 

for 循环的嵌套使用实例:

for i in range(1,6):
   for j in range(1, i+1):
      print("*",end='')
   print('r')

执行结果:

 

*

**

***

****

*****

 

 

从某个模块中导入某个函数,格式为: from somemodule import somefunction

如果是 IndentationError: unindent does not match any outer indentation level错误表明,你使用的缩进方式不一致,有的是 tab 键缩进,有的是空格缩进,改为一致即可。

http://www.geany.org/Download/Releases

Python身份运算符

身份运算符用于比较两个对象的存储单元

运算符

描述

实例

is

is 是判断两个标识符是不是引用自一个对象

x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,

否则返回 False

is not

is not 是判断两个标识符是不是引用自不同对象

x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回

结果 True,否则返回 False。

 

https://www.jetbrains.com/pycharm/download/#section=windows       Pycharm官网,其中Professional是收费的,功能更多

安装教程

执行结果:

================Python import mode==========================

命令行参数为:

C:/Users/X230/Desktop/usr/1021.py

 

 python 路径为 ['C:\Users\X230\Desktop\usr', 'C:\Users\X230\Desktop\usr', 'C:\Users\X230\AppData\Local\Programs\Python\Python36\python36.zip', 'C:\Users\X230\AppData\Local\Programs\Python\Python36\DLLs', 'C:\Users\X230\AppData\Local\Programs\Python\Python36\lib', 'C:\Users\X230\AppData\Local\Programs\Python\Python36', 'C:\Users\X230\AppData\Local\Programs\Python\Python36\lib\site-packages']

函数之间或‘类’的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。

多行语句:

Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠()来实现多行语句,例如:total = 'item_one' +

               'item_two' +

                'item_three'

 

在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(),例如:

total =['item_one',  ‘item_two’, ‘item_three’

               'item_four',  'item_five' ]

https://www.bilibili.com/video/av9784617/?from=search&seid=6723760175629363784#page=51                          爬虫教程(大学教授)

 

Python3 迭代器与生成器

 

本文由金沙官网线上发布于编程,转载请注明出处:Python笔记

您可能还会对下面的文章感兴趣: