30分钟速成python

环境安装

Windows

​ 访问 官网 下载并安装,具体安装过程很简单。

​ 使用交互界面,在开始菜单打开Python3 IDLE即可,也可以直接新建一个 filename.py 的文件,写上Python脚本,然后在命令行中输入 python filename.py 运行,还可以用IDLE打开这个文件,按F5运行。

MacOS、Linux

​ MacOS和绝大部分Linux发行版自带Python,无需特别安装

Anaconda

Anaconda概述

​ 但是比较头疼的就是Python的包管理和Python不同版本的问题,为了解决这一问题,推荐使用Anaconda。

Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。Anaconda利用工具/命令conda来进行package和environment的管理,并且已经包含了Python和相关的配套工具。

Anaconda安装

​ Anaconda的下载页参见官网下载,Linux、Mac、Windows均支持。

​ 下载后直接按照说明安装即可。

速成指南

原始数据类型和运算符

​ 这写在其他语言里也有体现,如果不是小白,请点击目录跳到下一节

# 整数
3 # => 3

# 算术
1 + 1 # ==> 2
3 - 2 # ==> 1
10 * 3 # ==> 30

# 但是除法除外 python会自动转化成浮点数
35 / 5 # ==> 7.0
5 / 3 # ==> 1.66666666667

# 整数除法的结果都是向下取整
5 // 3 # ==> 1
5.0 // 3.0 # ==> 1.0 浮点数也可以地板除
-5 // 3 # ==> -2
-5.0 // 3.0 # ==> -2.0

# 浮点数的运算结果也是浮点数
3 * 2.0 # ==> 6.0

# 取模
7 % 3 # ==> 1

# x 的 y次方
2**4 # ==> 8

# 括号决定优先级
(1 + 3) * 2 # ==> 8

# 布尔值
True
False

# 用 not 取非
not True # ==> False
not False # ==> True

#逻辑运算符
True and False # ==> False
False or True # ==> True

#整数也可以当作布尔值
0 and 2 #==> 0
-5 or 0 #==> -5
0 == False # ==> True
2 == False # ==> False
1 == True # ==> True

# 用==判断相等
1 == 1 # ==> True
2 == 1 # ==> False

# 用 != 判断不等
1 != 1 # ==> False
2 != 1 # ==> True

# 比较大小
1 < 10
1 > 10
2 <= 2
2 >= 2

# 比较大小可以连起来
1 < 2 < 3 # ==> True
2 < 3 < 2 # ==> False

# 字符串单引号双引号都可以
"henuwhr"
'henuwhr'

# 字符串可以被当作字符列表
"This is a string"[0] # ==> 'T'

# 用.format来格式化字符串
"{} can be {}".format("strings","interpolated")

# 可以重复参数,节省时间
"{0} be nimble, {0} be quick, {0} jump over the {1}".format("Jack", "candle stick")
#=> "Jack be nimble, Jack be quick, Jack jump over the candle stick"

# 如果不想用参数,可以使用关键字
"{name} wants to eat {food}".format(name="Bob",food="apple")

# 老式的格式化语法
"%s can be %s the %s way" % ("strings","interpolated","old")

# None 是一个对象
None
# 当与None比较时不要用 == 要用 is, is时用来比较两个变量是否值向同一个对象。
"etc" is None # ==> False
None is None # ==> True

# None,0,空字符串,空列表,空字典都是False
bool(0) # ==> False
bool("") # ==> False
bool([]) # ==> False
bool({}) # ==> False
变量和集合
# print是内置的打印函数
print("Hello, World")

# 再给变量赋值前不用提前声明
some_var = 5

# 访问未赋值的变量会抛出异常

# 用list存储序列
li = []
# 创建列表时也可以同时赋给元素
new_li = [4,5]

# 用append在列表的最后追加元素
li.append(1) # li = [1]
li.append(2) # li = [1,2]
li.append(3) # li = [1,2,3]
li.append(4) # li = [1,2,3,4]
# 用pop从列表尾部删除
li.pop() # ==> li = [1,2,3]
# 再把4放回去
li.appen(4)
# 列表存取跟数组一样
li[0] # => 1
# 取出最后一个元素
li[-1] # => 4
# 越界会造成IndexError
#列表有切割语法
li[1:3] # [2,3]
# 取尾
li[2:] # [3,4] 取出最后两个
# 取头
li[:3] # [1,2,3] 取出前三个
# 间隔取
li[::2] # [1,3] 
# 倒排列表
li[::-1] # => [4,3,2,1]
# 可以用三个参数的任意组合来切割
# li[始:终:步长]

# 用del删除任何一个元素
del li[2]  # li = [1,2,4]

# 列表可以相加
li + new_li # ==>[1,2,3,4,5]
# 用extend拼接列表
li.extend(new_li) # li = [1,2,3,4,5]

# 用 in 测试 列表是否包含值
1 in li # ==> True
# 用len获取列表长度
len(li) # ==> 5

#元组是不可改变的序列
tup = (1,2,3)
tup[0] = 3 # TypeError异常

#列表允许的操作元组大都也可以
len(tup) # ==> 3
tup + (4,5) # ==> (1,2,3,4,5)
# 可以把元组列表解包,赋值给变量
a, b, c = (1, 2, 3)
# 元组括号可以省略
d, e, f = 4, 5, 6
# 交换两个变量
e, d = d, e

# 用字典表达映射关系
empty_dict = {}
filled_dict = {"one":1,"two":2,"three":3}
# 用[]取值
filled_dict["one"] # ==> 1

# 用keys获得所有的键。因为keys返回一个可迭代对象,所以在这里把结果包在list里。我们下面会详细介绍可迭代。
# 注意:字典键的顺序是不定的,你得到的结果可能和以下不同。
list(filled_dict.keys())   # => ["three", "two", "one"]

# 用values获得所有的值。跟keys一样,要用list包起来,顺序也可能不同。
list(filled_dict.values())   # => [3, 2, 1] 

# 用 in 测试一个字典是否包含一个键
"one" in filled_dict # ==> True
1 in filled_dict # ==> False

# setdefault方法只有当键不存在的时候插入新值
filled_dict.setdefault("five", 5)  # filled_dict["five"]设为5
filled_dict.setdefault("five", 6)  # filled_dict["five"]还是5

#访问不存的键会导致KeyError
filled_dict["four"] # KeyError
# 用get来避免KeyError
filled_dict.get("one") # ==> 1
filled_dict.get("four") # ==? None
# 当键不存在的时候get方法可以返回默认值
filled_dict.get("one", 4)   # => 1
filled_dict.get("four", 4)   # => 4
# 字典赋值
filled_dict.update({"four":4}) #=> {"one": 1, "two": 2, "three": 3, "four": 4}
filled_dict["four"] = 4  # 另一种赋值方法
# 用del 删除
del filled_dict["one"]

# 用set表达集合
empty_set = set()
#初始化一个集合,语法跟字典相似
some_set = {1,1,1,3,3,2,4} # ==> some_set现在是 {1,2,3,4}

# 可以把集合赋给一个变量
filled_set = some_set
#为集合添加新的元素
filled_set.add(5) # filled_set现在是{1,2,3,4,5}

# & 取交集
other_set = {3,4,5,6}
filled_set & other_set # ==> {3,4,5}
# | 取并集
filled_set | other_set   # => {1, 2, 3, 4, 5, 6}
# - 取补集
{1, 2, 3, 4} - {2, 3, 5}   # => {1, 4}
# in 测试集合是否包含元素
2 in filled_set   # => True
10 in filled_set   # => False
流程控制和迭代器
some_var = 5
# if 语句
if some_var > 10:
    print("some_var > 10")
elif some_var < 10:
    print("some_var < 10")
else:
    print("some_var = 10")
 
"""
用for循环语句遍历列表
打印:
    dog is a mammal
    cat is a mammal
    mouse is a mammal
"""
for animal in ["dog", "cat", "mouse"]:
    print("{} is a mammal".format(animal))
    
"""
"range(number)"返回数字列表从0到给的数字
打印:
    0
    1
    2
    3
"""
for i in range(4):
    print(i)

"""
while循环直到条件不满足
打印:
    0
    1
    2
    3
"""
x = 0
while x < 4:
    print(x)
    x += 1  # x = x + 1 的简写

# 用try/except块处理异常状况
try:
    # 用raise抛出异常
    raise IndexError("This is an index error")
except IndexError as e:
    pass    # pass是无操作,但是应该在这里处理错误
except (TypeError, NameError):
    pass    # 可以同时处理不同类的错误
else:   # else语句是可选的,必须在所有的except之后
    print("All good!")   # 只有当try运行完没有错误的时候这句才会运行

    # Python提供一个叫做可迭代(iterable)的基本抽象。一个可迭代对象是可以被当作序列
# 的对象。比如说上面range返回的对象就是可迭代的。

filled_dict = {"one": 1, "two": 2, "three": 3}
our_iterable = filled_dict.keys()
print(our_iterable) # => range(1,10) 是一个实现可迭代接口的对象

# 可迭代对象可以遍历
for i in our_iterable:
    print(i)    # 打印 one, two, three

# 但是不可以随机访问
our_iterable[1]  # 抛出TypeError

# 可迭代对象知道怎么生成迭代器
our_iterator = iter(our_iterable)

# 迭代器是一个记住便利位置的对象
# 用__next__可以取得下一个元素
our_iterator.__next__() # ==> "one"
#再次调用
our_iterator.__next__() # ==> "two"
our_iterator.__next__()  #=> "three"
#当迭代器所有元素都取出后,会抛出StopIteration
our_iterator.__next__() # StopIteration
# 可以用list一次取出迭代器所有的元素
list(filled_dict.keys())  #=> Returns ["one", "two", "three"]
    
函数
# 用def定义函数
def add(x,y):
    print("x is {} and y is {}".format(x,y))
    return x + y
# 调用函数
add(5,6) # ==> "x is 5 and y is 6"并且返回11
#也可以使用关键字参数来调用函数
add(y=5,x=6) # 关键字参数可以用任何的顺序

# 定义一个可变参数函数
def varargs(*args):
    return args
varargs(1,2,3) ## => (1,2,3)

# 定义一个关键字可变参数函数
def keyword_args(**kwargs):
    return kwargs
keyword_args(big="foot",loch="ness") # => {"big": "foot", "loch": "ness"} 就是变成了一个字典
# 这两种可变参数可以混着用
def all_the_args(*args, **kwargs):
    print(args)
    print(kwargs)
"""
all_the_args(1, 2, a=3, b=4) prints:
    (1, 2)
    {"a": 3, "b": 4}
"""
# 调用可变参数函数时可以做跟上面相反的,用*展开序列,用**展开字典。
args = (1, 2, 3, 4)
kwargs = {"a": 3, "b": 4}
all_the_args(*args)   # 相当于 foo(1, 2, 3, 4)
all_the_args(**kwargs)   # 相当于 foo(a=3, b=4)
all_the_args(*args, **kwargs)   # 相当于 foo(1, 2, 3, 4, a=3, b=4)

# 函数的作用域
x = 5
def seX(num):
    x = num # ==> 43
    print(x) # ==> 43
def setGlobalX(num):
    global x
    print(x) # ==> 5
    x = num
    print(x) # ==>  6
setX(43)
setGlobalX(6)

# 函数在Python是一等公民
def create_adder(x):
    def adder(y):
        return x + y
    return adder

add_10 = create_adder(10)
add_10(3)   # => 13

# 也有匿名函数
(lambda x: x > 2)(3)   # => True

# 内置的高阶函数
map(add_10, [1, 2, 3])   # => [11, 12, 13]
filter(lambda x: x > 5, [3, 4, 5, 6, 7])   # => [6, 7]

# 用列表推导式可以简化映射和过滤。列表推导式的返回值是另一个列表。
[add_10(i) for i in [1, 2, 3]]  # => [11, 12, 13]
[x for x in [3, 4, 5, 6, 7] if x > 5]   # => [6, 7]

class Human(object):
    species = "H.Sapiens"
    # 构造方法,当实例被初始化时被调用。注意名字前后的双下划线,这是表明这个属
    # 性或方法对Python有特殊意义,但是允许用户自行定义。你自己取名时不应该用这
    # 种格式。
    def __init__(self, name):
        self.name = name
    # 实例方法 第一个参数总是self,就是这个实例对象
    def say(self,msg):
        return "{name}:{message}".format(name=self.name,message=msg)
    # 类方法,被所有此类的实例公用
    @classmethod
    def get_species(cls):
        return cls.species
    # 静态方法,调用时没有实例
    @staticmethod
    def grunt():
        return "*grunt*"
i = Human(name="Ian")
print(i.say("hi")) # "Ian: hi"

j = Human("Joel")
print(j.say("hello")) # "Joel: hello"

# 调用类的方法
i.get_species()

# 改一个共用的类属性
Human.species = "H. neanderthalensis"
i.get_species()   # => "H. neanderthalensis"
j.get_species()   # => "H. neanderthalensis"

# 调用静态方法
Human.grunt()   # => "*grunt*"

模块

# 用import导入模块
import math
print(math.sqrt(16))  # => 4.0

# 也可以从模块中导入个别值
from math import ceil, floor
print(ceil(3.7))  # => 4.0
print(floor(3.7))   # => 3.0

# 可以导入一个模块中所有值
# 警告:不建议这么做
from math import *

# 如此缩写模块名字
import math as m
math.sqrt(16) == m.sqrt(16)   # => True

# Python模块其实就是普通的Python文件。你可以自己写,然后导入,
# 模块的名字就是文件的名字。

# 可以这样列出一个模块里所有的值
import math
dir(math)

高级用法

# 用生成器(generators)方便地写惰性运算
def double_numbers(iterable):
    for i in iterable:
        yield i + i

# 生成器只有在需要时才计算下一个值。它们每一次循环只生成一个值,而不是把所有的
# 值全部算好。这意味着double_numbers不会生成大于15的数字。
#
# range的返回值也是一个生成器,不然一个1到900000000的列表会花很多时间和内存。
#
# 如果你想用一个Python的关键字当作变量名,可以加一个下划线来区分。
range_ = range(1, 900000000)
# 当找到一个 >=30 的结果就会停
for i in double_numbers(range_):
    print(i)
    if i >= 30:
        break


至少还有方向,有的人,一辈子都没有想过形而上的东西,他们是不自觉的囚徒

参考文章: Python 30分钟入门指南

文章名: 《30分钟速成python》
文章链接:http://hrhr7.cn/index.php/archives/10/
联系方式:tensor7@163.com
除特别注明外,文章均为Cupidr原创,转载时请注明本文出处及文章链接
Last modification:July 21st, 2019 at 03:47 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment