python学习之旅

3 篇文章 0 订阅
1 篇文章 0 订阅

两个最主要动力:

  • 第一个,爬虫,大数据分析,常见于知乎爬虫和百度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'))
  1. 访问特定网站
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

- 快速完成语句:ctrl+shift+enter

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值