python学习笔记(1)

教程1:runoob
教程2:廖雪峰的官方网站

笔记目录:

    • 1.第一个Python程序
    • 2.Python基础
      • 2.1 数据类型和变量
      • 2.2 字符串和编码
      • 2.3 数组相关
      • 2.4 条件判断
      • 2.5 循环
      • 2.6 dict 和 set
    • 3.函数
      • 3.1 调用函数
      • 3.2 定义函数
      • 3.3 函数的参数
    • 4.高级特性
      • 4.1 切片(slice)
    • 5.模块
      • 5.2 安装第三方模块
      • 5.3 模块搜索路径
    • 6.常用第三方模块
      • 6.1 Pillow
      • 6.2 requests
    • 7. 在一个.py文件调用另一个.py文件的函数
    • 8.python计算程序运行时间

1.第一个Python程序

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')

2.Python基础

2.1 数据类型和变量

数据类型
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)

2.2 字符串和编码

字符串

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('你好,中文测试正常')

2.3 数组相关

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 条件判断

#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 循环

# 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

# 2.6 dict 和 set
# dict:相当于其他语言的map
# set:

3.函数

3.1 调用函数

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 定义函数

# 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 函数的参数

# 3.3 函数的参数
# 默认参数

4.高级特性

4.1 切片(slice)

'切片'
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.模块

# 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()

# 作用域

5.2 安装第三方模块

在Python中,安装第三方模块,是通过包管理工具pip完成的。
注意:Mac或Linux上有可能并存Python 3.x和Python 2.x,因此对应的pip命令是pip3。
例如安装Pillow,使用命令pip install Pillow
当用到很多第三方库时,推荐直接使用Anaconda,
Anaconda是一个基于Python的数据处理和科学计算平台,它已经内置了许多非常有用的第三方库,
我们装上Anaconda,就相当于把数十个第三方模块自动安装好了,非常简单易用。
安装好Anaconda后,可以尝试直接import numpy等已安装的第三方模块。

5.3 模块搜索路径

当我们试图加载一个模块时,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自己本身的搜索路径不受影响。

6.常用第三方模块

6.1 Pillow

  • PIL:Python Imaging Library:图像处理标准库
  • Pillow:支持Python 3.x
  • 文档地址:https://pillow.readthedocs.io/en/5.2.x/
#!/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()

6.2 requests

  • requests是一个Python第三方库,处理URL资源特别方便
# 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)

7. 在一个.py文件调用另一个.py文件的函数

假设名为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()

8.python计算程序运行时间

计算程序运行的CPU时间(不包括其他程序使用CPU的时间)

import time
start = time.clock()
run_fun()
end = time.clock()
print(end-time)

你可能感兴趣的:(python)