【Python杂货铺】速学python基础

“人生苦短,我学python”是编程届的名言。用python写小脚本的便捷性,让不少其余语言的学习者把python看成辅助语言。拥有了某一个语言的功底,再来学习另一种语言应该是十分快速的。编程理念都十分类似,只是看看语言的差别性。带着Java的基础,学习Python,准备上路了。

图片描述

基础的运算

安装好python环境后,运行win+R,输入python直接进入python的交互页面,这边能够进行数学运算。html

>>> 2+2
4

表1 数学操做符,优先级从高到低java

操做符 操做 例子
** 指数 2 ** 3 8
% 取模/取余数 22 % 8 6
// 整除/商数取整 22 // 8 2
/ 除法 22 / 8 2.75
* 乘法 3 * 5 15
- 减法 5 - 2 3
+ 加法 2 + 2 4

由上面能够看出python前两个基础类型 <mark>整数</mark>、 <mark>浮点类型</mark>。这两个和java中的概念差很少。python

字符串

做为基础的类型,固然少不了字符串了,和java同样,字符串能够进行拼接操做。例如:编程

>>> 'AAA' + 'BBB'
'AAABBB'
>>> 'CCC'+25
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
>>> 'DEF'*3
'DEFDEFDEF'

如上,‘AAA’+'BBB'能够直接进行字符串的拼接。可是与java不一样的是 python不会进行类型强制转化,因此当用字符串‘CCC’+int型的25的时候就会报错。对python进行*操做,字符串会进行复制。数组

变量名

这边插一段,在java中进行变量声明的时候,须要指定变量类型,在python中不须要,可是python变量名也须要必定的规则。多线程

  1. 只能是一个词。
  2. 只能包含字母、数字和下划线。
  3. 不能以数字开头。

类型转化

为了让int型的5能够转化成字符串类型,从而和字符串拼接,python提供了一些内置函数。
表2 一些python内置函数
| 函数 | 做用 | 示例|
| :-----:| :----: | :----: |
|str() |转化类型为字符串 |str(5)|
|int()|转化类型为整数 |int('5')|
|float()|转化类型为浮点数|float('5')|
|print()|打印函数|略|
|input()|读取用户输入数据|myName = input()|
|len()|内容长度|len(myName)|app

控制流

布尔值

如今引入第四个数据类型,布尔值。python的布尔值也是有真或者假,可是python中的真为True(注意T必须大写),假为False(F也必须为大写),一样的布尔类型不能与其余类型相比较。dom

>>> True
True
>>> true
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'true' is not defined
>>> True = 1
  File "<stdin>", line 1
SyntaxError: can't assign to keyword

比较类型

表3 比较类型编程语言

操做符 含义
== 等于
!= 不等于
< 小于
> 大于
<= 小于等于
>= 大于等于

同时python也可使用二元操做符 <mark>and</mark>、<mark>or</mark>、<mark>not</mark>同java中的与、或、非。函数

条件与代码块

你前面看到的布尔表达式能够当作是条件,它和表达式是一回事。“条件”只是在
控制流语句的上下文中更具体的名称。条件老是求值为一个布尔值,True 或 False。控制
流语句根据条件是 True 仍是 False,来决定作什么。几乎全部的控制流语句都使用条件。

代码块

python没有java中那种{}来区分代码块,python中全部的代码块都是经过缩进进行的。

  1. 缩进增长时,代码块开始。
  2. 代码块能够包含其余代码块。
  3. 缩进减小为零,或减小为外面包围代码块的缩进,代码块就结束了。
>>> if 'a'=='b':
...     print('真')
... else:
...     print('假')
...
假

以上是一个if else 的控制流,条件后面加上冒号,而且代码块须要缩进方式。

while循环的格式以下:

spam = 0
while spam < 5:
print('Hello, world.')
spam = spam + 1

另外 python 也有break 和continue 关键字可使用。

for循环

for循环单另儿拿出来以示尊重,for循环的格式以下:

for 关键字;
一个变量名;
in 关键字;
调用 range()方法,最多传入 3 个参数;
冒号;
从下一行开始,缩退的代码块(称为 for 子句)。

for i in range(5):
    print('Jimmy Five Times (' + str(i) + ')')

i分别执行0、一、二、三、4.

<mark>range()</mark>方法其实有三个参数,只是能够省略其中两个。range(start、end、gap),能够指定开始、结束和步长。

>>> for i in range(0,10,3):
...     print(i)
...
0
3
6
9

函数

导入模块

Python 程序能够调用一组基本的函数,这称为“内建函数”,包括你见到过的print()、input()和 len()函数。Python 也包括一组模块,称为“标准库”。每一个模块都是一个 Python 程序,包含一组相关的函数,能够嵌入你的程序之中。例如,math模块有数学运算相关的函数,random 模块有随机数相关的函数,等等。
利用<mark>import</mark>或者<mark>from import</mark>语句

自定义函数

除了内建函数,大部分的函数都是自定义的。(即便从模块中导入的函数也是别人自定义好的,让你使用的)

def hello(name):
 print('Hello ' + name)

def 函数名(参数):
    函数体

None

在Python中有一个值称为None,它表示没有值。None是NoneType数据类型的惟一值(其余编程语言可能称这个值为null、nil或 undefined)。就像布尔值True和False同样,None必须大写首字母 N。

异常处理

def temp_convert(var):
    try:
        return int(var)
    except ValueError, Argument:
        print "参数没有包含数字\n", Argument

相似于java,python捕获处理一场用的是try,except,只不过在except后面除了能够跟异常类(好比例子中的ValueError),还能够跟上引起一场的参数(好比例子中的Argument,其实就是try中的var)

列表

列表能够看做java中的数组集合,能够存放一些元素,好比<mark>>>> spam = ['cat', 'bat', 'rat', 'elephant']</mark>。咱们能够经过index获取某个元素,好比spam[0]=‘cat’,同时能够从后往前拿数据,好比spam[-1]='elephant'。

切片

除了直接操做index,获取某个元素以外,还能够经过切片得到一段子列表。

>>> spam[1:3]
['bat', 'rat']
>>> spam[0:-1]
['cat', 'bat', 'rat']

列表的拼接与复制

与java不一样的是,python的列表能够自由的拼接复制。

>>> [1, 2, 3] + ['A', 'B', 'C']
[1, 2, 3, 'A', 'B', 'C']
>>> ['X', 'Y', 'Z'] * 3
['X', 'Y', 'Z', 'X', 'Y', 'Z', 'X', 'Y', 'Z']

列表结合某些关键字和方法

  1. 删除某列表中的某元素,能够直接用del关键字。
  2. 也能够结合for循环
>>> supplies = ['pens', 'staplers', 'flame-throwers', 'binders']
>>> for i in range(len(supplies)):
print('Index ' + str(i) + ' in supplies is: ' + supplies[i])
  1. 利用 in 、not in 直接判断某元素是否在列表中
>>> 'howdy' in ['hello', 'hi', 'howdy', 'heyas']
True
>>> spam = ['hello', 'hi', 'howdy', 'heyas']
>>> 'cat' in spam
False
  1. index()方法判断某元素在列表中的第一次出现的下标,没有的话就报错。
>>> spam = ['Zophie', 'Pooka', 'Fat-tail', 'Pooka']
>>> spam.index('Pooka')
1
  1. 用 append()和 insert()方法在列表中添加值

append()方法调用,将参数添加到列表末尾。insert()方法能够在列表任意下标处插入一个值。insert()方法的第一个参数是新值的下标,第二个参数是要插入的新值。

  1. 用remove()方法从列表中删除值
  2. 用sort()方法将列表中的值排序

元组

在java中,咱们知道String 是被final修饰的,因此String自己是不能修改的,若是对String进行修改,实际上是在内存中新建了一个新的String。相似的python中也有一个不可修改的数据类型——元组。元组和列表差很少,不少方法都是共通的。只不过,元组是用"()"表示,而且元组内的元素不能被修改,也不能对元组进行增长删除操做。

元组和列表的转化

函数list()和tuple()将返回传递给它们的值的列表和元组版本。

>>> tuple(['cat', 'dog', 5])
('cat', 'dog', 5)
>>> list(('cat', 'dog', 5))
['cat', 'dog', 5]
>>> list('hello')
['h', 'e', 'l', 'l', 'o']

引用与引用函数

>>> spam = [0, 1, 2, 3, 4, 5]
>>> cheese = spam
>>> cheese[1] = 'Hello!'
>>> spam
[0, 'Hello!', 2, 3, 4, 5]
>>> cheese
[0, 'Hello!', 2, 3, 4, 5]

看上面的代码,很是好理解,spam将引用复制给cheese,而不是复制的对象,因此对某个引用操做,都会改变那惟一的对象。若是想为cheese引用生成一个新的对象,就须要用到拷贝函数copy()和deepcopy()。其实就是java中的浅拷贝和深拷贝。

>>> import copy
>>> spam = ['A', 'B', 'C', 'D']
>>> cheese = copy.copy(spam)
>>> cheese[1] = 42
>>> spam
['A', 'B', 'C', 'D']
>>> cheese
['A', 42, 'C', 'D']

deepcopy()深拷贝是指,不只生成一个与spam同样新的对象,连spam内部的数据也一块儿复制一堆新的对象出来。就比如说把'A','B'这种元素分别换成一个个子列表,浅拷贝不会对他们复制,而深拷贝会对这些对象进行复制。

字典

像列表同样,“字典”是许多值的集合。但不像列表的下标,字典的索引可使用许多不一样数据类型,不仅是整数。字典的索引被称为“键”,键及其关联的值称为“键-值”对。因此能够说字典就是java中的Map。

myCat = {'size': 'fat', 'color': 'gray', 'disposition': 'loud'}

与列表不一样的是,字典没有顺序的概念,因此不能经过操做index获取某元素,不能使用切片,不能使用排序函数。

操做字典

基本操做

因此操做字典,就须要另辟蹊径,使用函数keys()、values()和 items()。顾名思义,分别是获取字典的key值们,val值们,和键值对自己们。

>>> spam = {'color': 'red', 'age': 42}
>>> for v in spam.values():
        print(v)
red
42
>>> for k in spam.keys():
        print(k)
color
age
>>> for i in spam.items():
        print(i)
('color', 'red')
('age', 42)

值得一提的是 spam.keys()得到的是元组,若是但愿的到对应的列表就须要用list函数转化。

检查字典中是否存在键或值

能够利用in 或者not in 关键字判断数据是否在字典中。

>>> spam = {'name': 'Zophie', 'age': 7}
>>> 'name' in spam.keys()
True
>>> 'Zophie' in spam.values()
True
>>> 'color' in spam.keys()
False
>>> 'color' not in spam.keys()
True
>>> 'color' in spam
False

get()和setdefault()方法

get()能够经过key值找到相对应的value值。get有两个参数,第一个参数是key值,第二个参数是在键值对不存在(或者说key不存在)的时候,给予的默认值。

>>> picnicItems = {'apples': 5, 'cups': 2}
>>> 'I am bringing ' + str(picnicItems.get('cups', 0)) + ' cups.'
'I am bringing 2 cups.'
>>> 'I am bringing ' + str(picnicItems.get('eggs', 0)) + ' eggs.'
'I am bringing 0 eggs.'

setdefault()有两个参数,第一个是要插入键值对的key值,第二个是默认值。当原字典中有这个key值,就什么也不作,若是原字典中没有这个key值,就将默认值做为value,同key一块儿拼成键值对插入到字典中。

>>> spam = {'name': 'Pooka', 'age': 5}
>>> spam.setdefault('color', 'black')
'black'
>>> spam
{'color': 'black', 'age': 5, 'name': 'Pooka'}
>>> spam.setdefault('color', 'white')
'black'
>>> spam
{'color': 'black', 'age': 5, 'name': 'Pooka'}

字符串操做

咱们早已经知道了字符串和其基本操做了,当咱们又学习了列表、元组、字典以后再来看一下更加丰富的处理字符串的方法。

转移字符和原始字符

和java同样,python也是用 对特殊字符进行转义。同时,还有原始字符 r。能够在字符串开始的引号以前加上r,使它成为原始字符串。“原始字符串”彻底忽略全部的转义字符,打印出字符串中全部的倒斜杠。

>>> print(r'That is Carol\'s cat.')
That is Carol\'s cat.

注释与多行字符

python单行注释可使用特殊字符#,同时多行注释可使用""".

# 这是一行注释
"""
这是多行注释
这是多行注释
这是多行注释
"""

有时候咱们在使用print函数的时候,打印的字符串很长很长,为了页面好看,可使用'''将大字符串拆分红好几行。

print('''Dear Alice,
Eve's cat has been arrested for catnapping, cat burglary, and extortion.
Sincerely,
Bob''')

字符串下标和切片

一个字符串也能够看成列表来处理,其中元素能够看做是一个个字符。因此就能够对字符串进行下标操做或者切片操做。一样的就能够利用in、not in判断某字符是否在字符串内了。

>>> spam = 'Hello world!'
>>> spam[0]
'H'
>>> spam[4]
'o'
>>> spam[-1]
'!'
>>> spam[0:5]
'Hello'
>>> spam[:5]
'Hello'
>>> spam[6:]
'world!'

一些字符串内建方法

  1. upper() 字符串所有变大写
  2. lower() 字符串所有变小写
  3. isupper()字符串至少有一个字母,而且全部字母都是大写
  4. islower()字符串至少有一个字母,而且全部字母都是小写
  5. isalpha()字符串只包含字母,而且非空
  6. isalnum()字符串只包含字母和数字,而且非空
  7. isdecimal()字符串只包含数字字符,而且非空
  8. isspace()字符串只包含空格、制表符和换行,而且非空
  9. startswith()字符串以该方法传入的字符串开始
  10. endswith()字符串以该方法传入的字符串结束
  11. join()拼接字符串,可指定分隔符
  12. split()经过某值切割字符串
  13. rjust()左填充,若是输出数据不足,补充空格
  14. ljust()右填充,若是输出数据不足,补充空格
  15. center()字符串居中,左右数据不足,补充空格

结束

呜呼,python的基础语法就算过了一遍,固然这只是基础中的基础。像python怎么处理多线程、类的概念、内存管理等内容有时间再看吧。不忘初心,最开始学习python只是把它看成辅助语言,写写小脚本什么的,不打算研究太深,毕竟时间有限,java还有不少东西要去研究,而且,除了编程,这个世界还有不少美好的事情等待我去体验。学以至用,写爬虫也是我学习python的一个动力,写了一个小脚本爬取豆瓣电影TOP250.(好像这个是爬虫入门经典案例吧,哈哈)代码贴一下

import requests as rq
from bs4 import BeautifulSoup
import pandas as pd

def get_data(url):
    print(url)
    html = rq.get(url).content.decode("utf-8")
    soup = BeautifulSoup(html,"lxml")
    divItems = soup.find_all("div","item")

    for item in divItems:
        name = item.find('span',{'class':'title'}).text
        rating_num = item.find('span',{'class':'rating_num'}).text
        number = item.find('em').text
        imgUrl = item.find("img").attrs['src']
        print("----------->")
        print("number:"+number)
        numbers.append(number)

        print("name:"+name)
        names.append(name)

        print("rating_num:"+rating_num)
        rating_nums.append(rating_num)

        print("imgUrl:"+imgUrl)
        imgUrls.append(imgUrl)
        print("----------->")


data_df = pd.DataFrame()
numbers = []
names = []
rating_nums = []
imgUrls = []

for num in range(0,10):
    get_data("https://movie.douban.com/top250?start={}&filter=".format(int(num)*25))

data_df["序列"] = numbers
data_df["名称"] = names
data_df["评分"] = rating_nums
data_df["海报"] = imgUrls
writer = pd.ExcelWriter('movie_top250.xlsx')
data_df.to_excel(writer, 'page_1', float_format='%.5f')  # float_format 控制精度
writer.save()

固然,提早须要install的模块
requests
BeautifulSoup4
pandas
openpyxl
lxml(BeautifulSoup4 的解析器)

结束。

相关文章
相关标签/搜索