两个最主要动力:
- 第一个,爬虫,大数据分析,常见于知乎爬虫和百度API接口
- 第二个,自动化脚本测试,在公司里比较常见的
先从一个例子开始
import turtle
import time
import random
#import srceen
#随机画图,随机移动,随机颜色
mycolor = ["blue","yellow","red","green","blown"]
#screen.colormode(255)
turtle.colormode(255) #设置模式
def drawShape(sides,length):
sides=int(sides) #需要转换类型,因为随机函数产生的是float型
length=int(length)
angle=360.0/sides
r=random.uniform(1,255)
g=random.uniform(1,255)
b=random.uniform(1,255)
r=int(r)
g=int(g)
b=int(b)
print(r,g,b)
turtle.begin_fill()
turtle.fillcolor((r,g,b))
for side in range(sides):
turtle.forward(length)
turtle.right(angle)
turtle.end_fill()
def moveTurtle(x,y):
turtle.penup()
turtle.goto(x,y)
turtle.pendown()
while True:
time.sleep(1) #使用定时器
sides=random.uniform(1,30) #最多三十边
l=random.uniform(1,50) #最长50
x=random.uniform(-500,500)
y=random.uniform(-500,500)
moveTurtle(x,y)
drawShape(sides,l)
这个py文件实现的功能是随机在绘画板上用turtle画随机颜色的随机多边形,效果如图
程序虽然简单,涉及到的知识点:
- import导入库,并使用,turtle,random, time
- 注释 ‘#’
- 定义函数 def
- tab键代替其它语言的{}
- 没有主函数,运行的这个py就表示运行其全部内容
第一章 基本概念
type
命名空间和作用域
built-in function
dir()
函数可以用来查看一个module所定义的所有names, 空的时候全局,dir(module)查看这个模块ascii()
repr()
global() local()
reload()
这里写代码片
python本质
import引用
两种引用
relative import
absolutive import
1 . 相对引用
from .string import a
from ..string import b
from ...string import c
这种引用方法使用‘.’表示引入库的精确位置,一个点表示当前目录,两个点表示上级目录,以此类推,通过点表示这种相对关系
2 . 绝对引用
import a.b.c import d //包含绝对路径 package->module
import实现机制
当我们执行一行 from package import module as mymodule 命令时,Python解释器会查找package这个包的module模块,并将该模块作为mymodule引入到当前的工作空间。所以import语句主要是做了二件事:
- 查找相应的module
- 加载module到local namespace
编码
python project工程
包package和模块module
包(package)可以理解为是组织起来的module的一个层次结构,也就是package是一个directory,它包含sub-package或者是module,而module是.py文件,要让Python Interpreter把一个目录作为package,则该目录下必须有init.py文件,init.py可以为空,当然也可以有对象定义和语句,用来做初始化工作,init.py还有个作用就是设置all变量。
package本身就可以来作为一个module使用,只是它所包含的sub-module或module可以通过package name用package.module的名称形式去引用,这更有利于组织一系列相关的module,避免module间定义的名称的混乱。
package在实际工程中非常常用,init.py也常常不会为空,而会有对象定义和初始化代码来让这个包,也就是这个module,包含其该有的item定义
__all__=['module1','module2']
以*导入时,package内的module是受init.py限制,自动导入__all__
里面的module
打包分发和管理包
setup.py
virtualenv
经典代码分析
1 . 输出爱心
print('\n'.join([''.join([('AndyLove'[(x-y)%8]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0 else' ')for x in range(-30,30)])for y in range(15,-15,-1)]))
2 . 复数
print('\n'.join([''.join(['*'if abs((lambda a:lambda z,c,n:a(a,z,c,n))(lambda s,z,c,n:z if n==0else s(s,z*z+c,c,n-1))(0,0.02*x+0.05j*y,40))2 else' 'for x in range(-80,20)])for y in range(-20,20)]))
3 . 九九乘法表
print('\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))
4 . 1-1000的质数
print(*(i for i in range(2, 1000) if all(tuple(i%j for j in range(2, int(i**.5))))))
5 . 前100个斐波那契数
print ([x[0] for x in [ (a[i][0], a.append((a[i][1], a[i][0]+a[i][1]))) for a in ([[1,1]], ) for i in xrange(100) ]])
6 . 输入一个数,输出它的阶乘
reduce ( lambda x,y:x*y, range(1,input()+1))
from functools import reduce
由于版本问题
7 . 摄氏度和华氏度的转换
print((lambda i:i not in [1,2] and "Invalid input!" or i==1 and (lambda f:f<-459.67 and "Invalid input!" or f)(float(input("Please input a Celsius temperature:"))*1.8+32) or i==2 and (lambda c:c<-273.15 and "Invalid input!" or c)((float(input("Please input a Fahrenheit temperature:"))-32)/1.8))(int(input("1,Celsius to Fahrenheit\n2,Fahrenheit to Celsius\nPlease input 1 or 2\n"))))
8 . 排序
"".join((lambda x:(x.sort(),x)[1])(list(‘string’)))
qsort = lambda arr: len(arr) > 1 and qsort(filter(lambda x: x<=arr[0], arr[1:] )) + arr[0:1] + qsort(filter(lambda x: x>arr[0], arr[1:] )) or arr
9 . 猜数字游戏
def guess_my_number(n):
while True:
user_input = raw_input("Enter a positive integer to guess: ")
if len(user_input)==0 or not user_input.isdigit():
print("Not a positive integer!")
else:
user_input = int(user_input)
if user_input > n:
print("Too big ! Try again!")
elif user_input < n:
print("Too small ! Try again!")
else:
print("You win!")
return True
guess_my_number(42)
10 . 随机选取
import random as rnd
print(rnd.choice([2,3, 5,7, 11,13,17]))
转换成Lambda 可以是:
print(lambda rnd: rnd.choice([1, 2, 3, 10]))(__import__('random'))
- 访问特定网站
import antigravity
爬虫
版本变化
基本元素的变化
print使用作为方法print()
库的变化
爬虫库
import urllib2 #2.x
import urllib.request #3.x
pycharm使用
- 修改字体大小,file-settings-font&color-save as(因为在软件初始化使用了一个模板,copy后修改
- 当前光标所在文件运行:
ctrl+shift+f10
- 快速导入module:
ctrl+alt+space