Python之入门篇

一、环境准备

环境准备 –> pyenv (安装python解释器,管理Python版本,管理python虚拟环境)

https://github.com/pyenv/pyenv
https://github.com/yyuu/pyenv-installer
# yum -y install git  
# curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
# vim /etc/profile.d/pyenv.sh加入
export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
# pyenv update 
# pyenv help (一般常用command,local,global,shell,install,uninstall,rehash,version,versions,which,whence)
# pyenv version 
# unset PYENV_ROOT
# 安装编译工具 `yum -y install gcc make path`
# 安装依赖 `yum -y install gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel`
# pyenv install 3.5.3 此处依赖开发包(gcc make patchgdbm-devel sqlite-devel zlib-devel bzip2-devel readline-devel) 注意
或者# wget -c http://7d9qvq.com1.z0.glb.clouddn.com/Python-3.5.2.tgz -O ~/.pyenv/cache/Python-3.5.2.tar.gz 
# pyenv install --list
# 安装Python 3.5.2 `pyenv install 3.5.3`

二、使用pyenv 

  • ### local 命令 
  • local命令切换当前目录
  • pyenv local system 或者 3.5.3
  • pyenv global 虽然提供了这种功能,但建议永远不要执行 
  • ##local命令切换当前目录及其子目录的Python版本,可以通过删除 `.python-version`来恢复默认的Python版本
  • ## global命令 
  • global命令切换全局默认Python版本
[root@node0 ~]# pyenv version
3.5.3 (set by /root/.python-version)
[root@node0 ~]# python -V
Python 3.5.3
pyenv commands
virtualenv
[root@node0 subdir]# pyenv virtualenv 3.5.3 magedu ##为了兼容旧的版本,所以保留
[root@node0 subdir]# pyenv uninstall magedu ##删除
[root@node0 subdir]# ll ~/.pyenv/versions/
total 0
drwxr-xr-x 7 root root 63 Mar 27 21:56 3.5.3
lrwxrwxrwx 1 root root 39 Mar 27 21:59 magedu -> /root/.pyenv/versions/3.5.3/envs/magedu
### virtualenv命令
创建虚拟环境  # pyenv virtualenv $bash_version $name 
### uninstall命令
卸载某个版本,包括虚拟环境
idea pycharm Atom vim 也可以补全

三、pip配置

mkdir ~/.pip 
vim ~/.pip/pip.conf
http://mirrors.aliyun.com/pypi/simple/
index-url = mirrors.aliyun.com #这里指的是否认证
linux下可以使用pycharm
# pip install ipython 
# pip install jupyter 
# jupyter-notebook --no-browser --ip 0.0.0.0  默认端口为8888
# jupyter notebook list

四、基础语法 

  • hello world
  • 常量/变量
  • 运算符/表达式 
  • 程序控制结构 
  • print(‘hello world’)
  • hello world 
  • 常量/变量 (强类型,动太语言)
  • 字面常量 
  • 变量
  • 变量是一个指针,它指向一块内存
  • v = 1  python中变量跟着赋值运算符出现
  • v2 = v 

变量的命令名规则 

  1. 只能以字母、数字和下划线 
  2. 只能以字母或者下划线开始
  3. 不能是Python解释器的保留字 (for if in) for_ 这样可以做变量的命名

运算符:

  1. 算术运算符 
  2. 逻辑运算符
  3. 比较运算符
  4. 其他运算符
  5. 赋值运算符
  6. 成员运算符
  7. 身份运算符


算术运算符通常只针对数值类型 

  1. python中#事表示注示 
  2. 算术运算符:+ – * / % ** 
  3. 比较运算符: == 相等  !==不等于 >大于 >=大于等于  < 小于 <=小于等于
  4. 1==1  Ture 1==2 False 1>2 False 2>1 True 2>=1 True 2>=2 True  1<2 Ture 1<=2 True
  5. 1==’1′ False   1 != ‘1’ Ture 1 < ‘1’ 报错  3//5 取整除
  6. 所以除了 == 和!=最好类型相同

逻辑运算符 

  1. and or not 
  2. 参与运算的成员只能是bool类型,或者可以隐式转化为bool类型的类型 
  3. True False
  4. and 需要运算符两边都是True结果才为True 
  5. or 只要运算符两边任意一个True,结果就是True
  6. not True 返回False
  7. 短路
  8. def add(x, y):
  9. print(“{0} + {1}”.format(x,y))
  10. return x + y
  11. add(1, 3)
  12. add(1, 3) > add(1, 2) and add(2, 4) < add(3, 4)
  13. add(1,3) < add(1, 2) and add(2, 4) < add(3, 4)
  14. 总是从左到右的计算,一旦能够决定表达式最终的值,将立记得停止计算并返回
  15. add(1, 3) < add(1, 2) or add(2, 4) < add(3, 4)
  16. bin(60)
  17. bin(12)
  18. 60 & 12 
  19. 60 | 12 
  20. 60 ^ 12
  21. init(”)
  22. ~60 
  23. 60 >> 2 右移
  24. 60 << 2 左移

左边是一个标示符 右边是一个值(或者可以计算为一个值)
让这个标示符指向这个值所在的内存
运算符的优先级 
1+2*3  7
2 * 3 ** 2 18
2*3 > 1+2 True 
算术运算符优先高于比较运算符 
2* 3 > 1+2 and True   True 
比较运算符的优先级高于逻辑运算符
(2*3 > 1+2 )and True  True 拿不准的时候加括号
表达式 变量/常量 和 运算符组成
程序控制结构 顺序 、 分支 、 循环
程序控制结构 
顺序结构 
a = 0 
a = a+1
print (a) 
分支结构 
if cond: 
   block
if 1 < 2:
   print(‘1 less 2’) 
print(‘main block’) 重新回到主结构中

程序结构 main block –> 条件 –> 成功 –> 分支 –> main block 
–> 失败 –> main block 
bool(0) False 
bool(-0) False 
bool(1) True 
boole(None) False 
bool([]) False 
bool (”) False 
0、空的内置结构、None bool的结构都是False,非0、非空的内置结构都是True 

双分支 
if cond: 
ture_block 
else:
false_block 
主流程–> 条件 –> 满足–> true block –> 主流程 
 不满足–> false block –> 主流程
if 1 < 2:
print (‘1 < 2’)
else: 
print (‘1 > 2’)
if cond1:
block 1 
elif cond2:
block 2 
elif cond3:
block 3
.
.
.
else:
default block 

主流程–> 条件1 –> 成功 –> 分支1 –> 主流程 
–> 失败 –> 条件2 –> 成功 –> 分支2 –> 主流程 
  失败 –> 默认分支 –> 主流程

a = 5

if a < 0:
print(‘less 0’)
elif a < 3:
print(‘less 3’)
elif a < 5:
print(‘less 5’)
elif a < 7:
print(‘less 7’)
else:
print(‘oops’)
结果输出为less 7 
分支结构,永远只有一个分支结构会被执行 

循环语句
while block:
block 

a = 0 
while a < 10:
print(a)
a += 1 #a = a +1 
主流程 –> 条件 –>  为真 –> 循环体 –> 主流程 
–>  为假 –> 主流程 
通常 在while循环中,循环体需要修改条件,以使得条件为假  
for element in itratable:
block 
range(0,10) 
for i in range(0,10): 
print(i)
输出结果为零到十 
主流程 –> 序列里是否还有元素 –> 有 –> 取出一个元素 –> 循环体 –> 序列里是否还有元素前
 –> 无 –> 回到主流程 
注:循环体中绝对不要修改可迭代对象

五、实验

lst = range(0,10)
for i in lst:
lst.append(i)
这样的情况会死机,产生不可预料的结果
for i in range(0,10):
if i %2 == 0:
print(i) 取出所有的偶数
for i in range(0,10):
if i %2 == 0:
print(i) 
if i > 3:
break
break 用于提前结束循环 
for i in range(1,10):
if i == 3:
continue
print(i)
continue 用于跳过之后的语句 
实例: 求素数 
a = 6 
c = 0
for i in range(2,a):
if a % i == 0:
break 
c +=1 
if c < a - 2:
print('no')
else:
print('yes')
a = 6 
for i in range(2,a):
if a %1 == 0:
break 
else 
print('yes')
##循环结构中 else子句判断循环有没有提前退出,如果提前退出了,执行else
is_break = False
for i in range(0,10):
    for x in range(0,10):
        if x >=3:
            is_break = True
            break
        print('x = {0}'.format(x))
    if is_break:
        break
##使用括号标注下面表达式的优先级
1 + 3 * 4 ** 2 > 3 and 2- 3 < 10 
##已知input函数可以接收用户输入,并返回字符串的输入,int函数可以把字符串转化为整数例如:
a = input("input a number: ") # 等待用户输入,并赋值给a,此时a是字符串
a = int(a) #把a转化为数字,并赋值给a
补充:将vim tab设置为四个空格 
vim /etc/vimrc 
:set ts=4
:set expandtab
:%retab!
#!/usr/bin/env python 
NUM=35 
count = 0 
while count < 3:
    user_input = int(input('please input a number: '))
    if user_input == NUM:
        print('you win')
        break 
    elif user_input < NUM:
        print('less')
    else:
        print('big')
    count += 1
else:
    print('you lose') 
用for 语法来实现
#!/usr/bin/env python 
NUM = 35
for _ in range(0, 3): (注:此处不使用此变量,直接把其丢弃,因为此处需要的是一个循环次数)
user_input = int(input('please input a number: '))
if user_input == NUM:
print('you win')
break
elif user_input < NUM:
print('less')
else:
print('big')
else:
print('you lose')
import math 
打印一到一百的基数 
for n in range (2,101):
    for x in range(2,n):
        if n % x == 0:
            break
        else:
            print(n)
  1. 其他运算符,成员运算符,内置数据结构 
  2. 身份运算符,面向对象 
  3. 程序控制结构 
  4. 顺序(正常执行),分支 (if),循环 (while,for)
  5. break 用于提前结束循环 
  6. continue 用于跳过当前循环剩下的部分 
  7. 内置数据结构/内置容器 
  8. 五种内置容器
  9. 元组 
  10. 集合 
  11. 字典 
  12. 列表 
  13. 字符串 
  14.  线性结构(切片操作/解包/封包)
  15. 解析式(Python3特有)
  16. 对表解析
  17. 生成器解析 
  18. 集合解析 
  19. 字典解析
  20. #在python中如何定义一个列表
  21. 定义空列表的两种方式 
  22. lst = list()
  23. lst = []
  24. 也可以来直接赋值 
  25. lst[1,2,3]
  26. 下标/索引/操作 
  27. Python中list的索引从0开始 
  28. lst[0]
  29. lst[1]
  30. lst[-1]
  31. 负数索引表示从后往前,由-1开始,-1表示最后一个元素
  32. 如果索引超出范围,将引发IndexError 
  33. lst 
  34. lst[0] = 5 直接修改list的第五个元素 
  35. lst[-1] = 10 直接修改list的最后一个元素
  36. lst[3] = 12 对不存在的元素进行修改会报错  
  37. 修改元素的时候,如果超出索引范围,也会引发 IndexError
  38. 给list增加元素 
  39. help(list) 可以打印出list的所有方法来 
  40. ###append 
  41. lst
  42. lst.append(12) append 方法原地修改list, 给list增加一个元素,append的方法的返回值是None 
  43. help(list.apped) 可以查看append的用法的说明。
  44. help(lst.insert) 
  45. lst.insert(0,7) 在第1个元素之前加入7 
  46. lst.insert(3,0) 在第4个元素之前加入0 
  47. lst,insert(100,76) insert 超出范围的话, 是在最后增加 
  48. lst.insert(-100,78) insert 超出-范围的话,是在最前面增加 
  49. insert操作的索引超出范围,如果是正索引,等效于append,如果是负索引,等于insert(0,object)
  50. insert O(n) append O(1) 
  51. extend
  52. lst.extend([1,2,3])
  53. lst 
  54. help(lst.extend)
  55. 删除元素 
  56. pop 
  57. lst 
  58. lst.pop() 默认从最后移除一个元素,并且将这个元素返回回来! 
  59. lst.pop(0) 将第一个元素删除 
  60. lst.pop(-1) 将最后一个元素移除 
  61. index 默认为-1 如果index超出索引返回,会抛出IndexError
  62. remove 
  63. help(lst.remove) 可以提供帮助
  64. lst.remove(10)
  65. lst.apped(2)
  66. lst 
  67. lst.remove(2) 匹配到索引的第一个元素  将匹配到的2删除 
  68. pop是弹出索引对的值  remove是删除最左边的一个值 
  69. lst.remove(90)
  70. remove的时候,如果值不存在,会抛出ValueError
  71. del lst [0] 
  72. lst 
  73. lst  列出lst里头的元素 
  74. clear 方法是删除所有元素 
  75. 查找/统计元素  
  76. help(lst.index) 
  77. lst = [‘a’,’b’,c’,’d’]
  78. lst 
  79. lst.index(‘b’) 返回的是从左往右的第一个元素
  80. lst.append(‘b’) 
  81. lst.index(‘b’,2) 找匹配到的第二个元素 
  82. lst.index(‘b’,2,4)
  83. start 包含 stop 不包含 
  84. index方法是根据值找索引 
  85. 还可以用count方法来找索引  
  86. lst  
  87. help(lst.count) 
  88. lst.count(‘a’) 
  89. lst.count(‘b’) 
  90. 查看lst中包含多少个这样的值。 
  91. len 函数 
  92. len(lst) 统计列表里头所有值的个数 
  93. 修改列表
  94. sort 对列表做一个排序  
  95. help(lst.sort) 
  96. lst
  97. out: [‘a’,’b’,’c’,’d’,’b’]
  98. lst.sort() 
  99. lst.sort() 
  100. lst 
  101. out: [‘a’,’b’,’b’,’c’,’d’]
  102. lst.sort(reverse=True) 
  103. lst 
  104. out: [‘d’,’c’,’b’,’b’,’a’] 
  105. reverse反转
  106. help(lst.reverse) 
  107. lst
  108. [‘d’,’c’,’b’,’b’,’a’] 
  109. lst.reverse() 
  110. lst 
  111. [‘a’,’b’,’b’,’c’,’d’] 
  112. 其它方法 
  113. copy 如果从右往前删,则把它reverse过来 
  114. lst= [1,3,2,4,2,3,2,5] 删除最后一个元素 
  115. lst.reverse() 
  116. lst.remove(2)  删除后,再将元素反转过来 
  117. lst.reverse()
  118. lst2 = lst 相当于多加了一个指针  
  119. lst2 =lst.copy() 相当于lst对lst2全部的一个复制,而非指针  
  120. lst2.remove(2) 
  121. lst2 
  122. lst 

import time
a=0
while( a<10 ):
    time.sleep(1)
    print(a)
    a=a+1

六、好玩的python 爬虫示例(不喜勿喷)

import requests
import re
from bs4 import BeautifulSoup
import sys

url = 'https://www.meitulu.com/'


def getHTMLTEXT(url):
    try:
        headers = headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0',
                             'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                             'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
                             'Accept-Encoding': 'gzip, deflate',
                             'Connection': 'keep-alive',
                             'Referer': None  # 注意如果依然不能抓取的话,这里可以设置抓取网站的host
                             }
        response = requests.get(url, headers=headers)
        #                raise_status_code()
        response.encoding = 'utf-8'
        return response.text
    except:
        pass


def getURLlist(list):  # 获取每个链接的完整链接
    html = getHTMLTEXT(url)
    soup = BeautifulSoup(html, 'html.parser')
    urllist = soup.select('div.boxs > ul > li > a ')
    for fhref in urllist:
        try:
            href = fhref.attrs['href']
            hrefall = 'https://www.meitulu.com/' + href

            list.append(hrefall)
        except:
            continue
    return list


def getpagelist(pageurl, pagelist):  # 传入一个链接 获取这个个链接的每个页链接

    pagehtml = getHTMLTEXT(pageurl)
    soup = BeautifulSoup(pagehtml, 'html.parser')
    pageurllist = soup.select('html body center div#pages a')
    for pageurl in pageurllist:
        pagehref = 'https://www.meitulu.com' + pageurl.get('href')
        pagelist.append(pagehref)

    pagelist.pop()
    return pagelist


def downloaderpic(pagehref, picpath):  # 传入一个pageurl 获取页面里面每张图片的链接并且下载到指定目录


    html = getHTMLTEXT(pagehref)
    soup = BeautifulSoup(html, 'html.parser')
    pichrefs = soup.select('html body div.content center img')
    for spichref in pichrefs:
        pichref = spichref.get('src')
        picname = pichref.split('/')[-1]
        headers = headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0',
                             'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                             'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
                             'Accept-Encoding': 'gzip, deflate',
                             'Connection': 'keep-alive',
                             'Referer': None  # 注意如果依然不能抓取的话,这里可以设置抓取网站的host
                             }
        response = requests.get(pichref, headers=headers)
        path = picpath + picname
        print(response.url)

        with open(picpath + picname, "wb") as f:
            f.write(response.content)
            f.close


# def downloaderpic(pageurl):

def main():
    """
    urllists 是首页中所有页面的集合
    pagelist 是每个链接里面的所有页的集合
    """
    picpath = "D:/pic/"
    ulist = []
    urllists = getURLlist(ulist)
    plist = []

    howurl = len(urllists)
    flag = 0
    for urllist in urllists:
        pagelist = getpagelist(urllist, plist)  # 对页面遍历获取所有每个链接的页面list
        flag = flag + 1
        howpage = 0 + len(pagelist)
        count = 0
        for pagehref in pagelist:  # 对页面list遍历获取所有页面的href
            downloaderpic(pagehref, picpath)
            count = count + 1
            print('共有{0}链接正在下载第{1}个连接-------第{1}个链接有{2}个页面正在下载第{3}个页面'.format(howurl, flag, howpage, count), end="\r")


main()
print("下载完成,文件保存在D:/pic/目录"
      "下")

原创文章,作者:kang,如若转载,请注明出处:http://www.178linux.com/79164

(0)
kangkang
上一篇 2017-02-05
下一篇 2017-02-05

相关推荐

  • linux权限详解

    写在前面: 本博客详解命令chmod,  chowm,  chgrp,  umask,  install,  mktemp  权限管理: 进程文件访问权限应用模型: 进程的属主与文件属主是否相同,如果相同,则应用属主权限 否则,检查文件的属主是否属于文件的属组,如果是,则应用属主权限 否则,应用ot…

    Linux干货 2015-12-19
  • 马哥教育网络班21期-第2周课程练习

    1、 Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 cp 复制、mv 剪切、rm 删除 tree,mkdir 2、 bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。 echo$ 查看命令执行状态返回值 。 返回0,则表示执行成功。 返回非零,则表示执行失败。(1-255) 3、请使用命令行展开功能来完成…

    Linux干货 2016-07-17
  • iptables

    iptables 包过滤型的防火墙 Firewall:防火墙,隔离工具;工作于主机或网络边缘,对于进出本主机或本网络的报文根据事先定义的检查规则作匹配检测,对于能够被规则匹配到的报文作出相应处理的组件; 主机防火墙网络防火墙 软件防火墙(软件逻辑)硬件防火墙(硬件和软件逻辑) 版本 ipfw (firewall framework):命令行工具,生成规则并送…

    Linux干货 2017-06-13
  • 【N25第一周作业】Linux基础

    题目:   1、描述计算机的组成及其功能。   2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。   3、描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。   4、说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、his…

    Linux干货 2016-12-03
  • 文本全屏编辑器 vim

             vim在Linux中站着很重要的位置,是每一个学习Linux人员的必须掌握的技能之一,因为vim功能很强大为我们编辑文件和脚本带来了很大的方便。接下来我们来一起了解vim的功能。   文本编辑种类:     行编…

    Linux干货 2016-08-15
  • 硬链接与软链接

    引言: 链接,一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。 Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。 Inode译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。 Block:存放档案内容数据的地方。 &n…

    Linux干货 2016-10-20