教程1:runoob
教程2:廖雪峰的官方网站
笔记目录:
python输入输出
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'a test module'
__author__ = 'xxx'
# 第1行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
# 第2行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
# 第4行是一个字符串,表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释;
# 第6行使用__author__变量把作者写进去,这样当你公开源代码后别人就可以瞻仰你的大名;
# 以上就是Python模块的标准文件模板,当然也可以全部删掉不写,但是,按标准办事肯定没错。/
# 后面开始就是真正的代码部分。
if __name__ == '__main__':
print('hello word')
数据类型
1 python的数字类型分为整型、长整型、浮点型、布尔型、复数类型。
2 python没有字符类型
3 python内部没有普通类型,任何类型都是对象。
4 如果需要查看变量的类型,可以使用type类,该类可以返回变量的类型或创建一个新的类型。
5 python有3种表示字符串类型的方式,即单引号、双引号、三引号。单引号和双引号的作用是相同的。python程序员更喜欢用单引号,C/Java程序员则习惯使用双引号表示字符串。三引号中可以输入单引号、双引号或换行等字符。
变量
1 python中的变量不需要声明,变量的赋值操作即是变量声明和定义的过程。
2 python中一次新的赋值,将创建一个新的变量。即是变量的名称相同,变量的标识并不相同。用id()函数可以获取变量标识:
3 如果变量没有赋值,则python认为该变量不存在
4 在函数之外定义的变量都可以称为全局变量。全局变量可以被文件内部的任何函数和外部文件访问。
常量
python中没有提供定义常量的保留字。可以自己定义一个常量类来实现常量的功能。
#2.1 数据类型和变量
# 布尔值
# True False
# 空值
# None
# 变量 同一个变量可以是不同类型的变量
a = 123
print('a =', a)
a = 'ABC'
print('a =', a)
字符串
1 格式化输出:
# 格式化 %:占位符
print('Hi, %s, you have $%d.' %('Michael', 100000))
print('%.2f' %3.1415926)
# 如果你不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串
print('Age: %s. Gender: %s' %(25, True))
2 用+进行字符串的合并:
str1 = 'hello'
str2 = 'world'
result = str1 + str2
print(result)
3 字符串截取可以通过索引/切片,也可以通过split函数。
4 通过切片截取字符串:
str = 'world'
print(str[0:2])
5 python使用==和!=来进行字符串比较。如果比较的两个变量的类型不相同,那么结果必然为不同。
str1 = 'hello'
str2 = 'world'
print("str1 == str2:", str1 == str2)
print('''line1
line2
ling3''')
print('''line1
line2
ling3''')
# ord()函数获取单个字符的整数表示,chr()函数把编码转换为对应的字符:
# 计算字符串长度
len('ABC')
# test
s1 = 72
s2 = 85
r = (s2 - s1) / s1 * 100
print('%.1f%%' % r)
编码
# 字符编码
# ASCII码 无中文->Unicode 用的存储空间多->UTF-8(可变长编码)
# 中文测试
print('你好,中文测试正常')
1 元组(tuple):python中一种内置的数据结构。元组由不同的元素组成,每个元素可以存储不同类型的数据,如字符串、数字甚至元素。元组是写保护的,即元组创建之后不能再修改。元组往往代表一行数据,而元组中的元素代表不同的数据项。可以把元组看做不可修改的数组。创建元组示例如下:
tuple_name = ("apple", "banana", "grape", "orange", 1, 2, 0.98)
print("tuple_name = ", tuple_name)
2 列表(list):列表和元组相似,也由一组元素组成,列表可以实现添加、删除和查找操作,元素的值可以被修改。列表是传统意义上的数组。列表创建示例如下:
list = ["apple", "banana", "grape", "orange"]
print("list =", list)
list.append("red")
list.append("blue")
print("list =", list)
list.remove("apple")
print("list =", list)
可以使用append方法来在尾部追加元素,使用remove来删除元素。
如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素,如下:
classmates = ['Michael', 'Bob', 'Tracy']
print(classmates[-1])
#显示结果为:'Tracy'
3 字典(dictionary):由键-值对组成的集合,字典中的值通过键来引用。键和值之间用冒号隔开,键-值对之间用逗号隔开,并且被包含在一对花括号中。创建示例如下:
dict = {'a': 'apple', 'b': 'banana', 'g': 'grape'}
# 访问字典内元素
print("dict['a']:", dict['a'])
print("dict['g']:", dict['g'])
# 修改字典
dict['a'] = 'age';
print("dict['a']:", dict['a'])
# 删除字典元素
del dict['g']
print("dict['g']:", dict['g'])
#上面这句话引发异常,因为del后dict['g']不存在
#2.4条件判断
# age = input('please input your age:')
age = 18
if age >= 18:
print('you are an adult')
elif age >= 6:
print('you are a teenager')
else:
print('you are a kid')
# test
height = 1.75
weight = 80.5
bmi = weight / (height * height)
print(bmi)
if bmi < 18.5:
print('过轻')
elif bmi < 25:
print('正常')
elif bmi < 28:
print('过重')
elif bmi < 32:
print('肥胖')
else:
print('严重肥胖')
python本身没有switch语句。
# 2.5 循环
# 两种:for...in 和 while 循环
# 2.5.1 for...in 循环
# 下面的for name in names循环指:把names中的每个元素代入变量name,然后执行缩进块的语句
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
# sum = 0
# for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
# sum = sum + x
# print('sum =',sum)
# range()函数:生成序列:从0开始至小于5的整数
sum = 0
for x in list(range(101)):
sum = sum + x
print('sum = ',sum)
# 从1开始生成1-10
for i in range(1, 11):
print ("i =", i)
# 2.5.2 while循环
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print('sum = ', sum)
# test
L = ['Bart', 'Lisa', 'Adam']
for s in L:
print('Hello, %s!' %(s))
# break
# 2.6 dict 和 set
# dict:相当于其他语言的map
# set:
1 python程序由包(package)、模块(module)和函数组成。包是由一系列模块组成的集合。模块是处理某一类问题的函数和类的集合。
2 包就是一个完成特定任务的工具箱。
3 包必须含有一个init.py文件,它用于标识当前文件夹是一个包。
4 python的程序是由一个个模块组成的。模块把一组相关的函数或代码组织到一个文件中,一个文件即是一个模块。模块由代码、函数和类组成。导入模块使用import语句。
5 包的作用是实现程序的重用。
6 函数是一段可以重复多次调用的代码。
7 函数返回值可以用return来控制。
# 3.1调用函数
print(abs(-100))
print(max(-110, 100, 2, 30))
# 数据类型转换
print(int('123'))
print(12.33334)
print(1.234)
# 函数别名
a = abs
print(a(-1))
# test
n1 = 255
n2 = 1000
print('255 =', str(hex(n1)))
print('1000 =', str(hex(n2)))
# 3.2定义函数
def my_abs(x):
if x >= 0:
return x
else:
return -x
print(my_abs(-99))
# 如果已经把my_abs()的函数定义保存为abstest.py文件了,那么可以在该文件的当前目录下启动
# python解释器,用from abstest import my_abs来导入my_abs()函数,注意abstest是文件名(不含.py扩展名)
from abstest import my_abs1
print(my_abs1(-20))
# 空函数
def nop():
pass
# 参数检查
# 返回多个值
# 返回值是一个tuple
import math
def move(x, y, step, angle = 0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
# x, y = move(100, 100, 60, math.pi / 6)
# print(x, y)
r = move(100, 100, 60, math.pi / 6)
print(r)
# test
# 计算方程ax^2 + bx + c = 0 的根
def quadratic(a, b, c):
s = b * b - 4 * a * c
if a == 0:
x = -c / b
return x
elif s == 0:
x = -b / 2*a
return x
elif s < 0:
return 'No Answer'
else:
x1 = (-b + math.sqrt(s)) / (2 * a)
x2 = (-b - math.sqrt(s)) / (2 * a)
return x1, x2
r = quadratic(2, 3, 4)
print('quadratic(2, 3, 1) =', quadratic(2, 3, 1))
print('quadratic(1, 3, -4) =', quadratic(1, 3, -4))
if quadratic(2, 3, 1) != (-0.5, -1.0):
print('测试失败')
elif quadratic(1, 3, -4) != (1.0, -4.0):
print('测试失败')
else:
print('测试成功')
# 3.3 函数的参数
# 默认参数
'切片'
L = [0, 1, 2, 3, 4]
n = 3
# 取L的前n个元素, L[0:3]表示从索引0开始,到索引3为止,但不包括3!!
print (L[0:n])
# 通过range函数创建一个0-10的数列,不包括10!!
L2 = list(range(10))
print (L2)
# 5.1 使用模块
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
def test():
args = sys.argv
if len(args) == 1:
print('Hello, world!')
elif len(args) == 2:
print('Hello, %s!' %args[1])
else:
print('Too many arguments!')
if __name__=='__main__':
test()
# 作用域
在Python中,安装第三方模块,是通过包管理工具pip完成的。
注意:Mac或Linux上有可能并存Python 3.x和Python 2.x,因此对应的pip命令是pip3。
例如安装Pillow,使用命令pip install Pillow
当用到很多第三方库时,推荐直接使用Anaconda,
Anaconda是一个基于Python的数据处理和科学计算平台,它已经内置了许多非常有用的第三方库,
我们装上Anaconda,就相当于把数十个第三方模块自动安装好了,非常简单易用。
安装好Anaconda后,可以尝试直接import numpy等已安装的第三方模块。
当我们试图加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错:
ImportError: No module named mymodule
如果我们要添加自己的搜索目录,有两种方法:
一是直接修改sys.path,添加要搜索的目录:
>>> import sys
>>> print(sys.path)
>>> sys.path.append('/Users/xxx/my_py_scripts')
这种方法是在运行时修改,运行结束后失效。
第二种方法是设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。
设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'常用第三方模块'
# 1.pillow
from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random
im = Image.open('test.jpg')
# im.show()
# 获得图像尺寸
w, h = im.size
print('Original image size : %sx%s' %(w, h))
# 应用模糊滤镜
im2 = im.filter(ImageFilter.BLUR)
# im2.show()
# 生成字母验证码图片
# 随机字母
def rndChar():
return chr(random.randint(65, 90))
# 随机颜色1
def rndColor():
return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))
# 随机颜色2
def rndColor2():
return (random.randint(64, 255), random.randint(32, 127), random.randint(32, 127))
# 240*60
width = 60 * 4
height = 60
img = Image.new('RGB', (width, height), (255, 255, 255))
# 创建Font对象
font = ImageFont.truetype('Arial.ttf', 36)
# 创建Draw对象
draw = ImageDraw.Draw(img)
# 填充每个像素
# img.show()
for x in range(width):
for y in range(height):
draw.point((x, y), fill = rndColor())
# img.show()
# 输出文字
for t in range(4):
draw.text((60 * t + 10, 10), rndChar(), font = font, fill = rndColor2())
# 模糊
img = img.filter(ImageFilter.BLUR)
img.show()
# 2.requests
import requests
r = requests.get('https://www.douban.com/')
print(r.status_code)
# print(r.text)
# 带参数的URL,传入dict作为params参数
r = requests.get('https://www.douban.com/search', params = {'q': 'python', 'cat': '1001'})
# 查看链接
print(r.url)
# 查看编码
print(r.encoding)
假设名为test.py的文件需要调用A.py文件内的A_print()函数
在同一个目录下:
#A.py
def A_print():
print ("AAA")
要在test.py中调用A_print()函数:
#test.py
import A
A.A_print()
或:
#test.py
from A import A_print
A_print()
计算程序运行的CPU时间(不包括其他程序使用CPU的时间)
import time
start = time.clock()
run_fun()
end = time.clock()
print(end-time)