python | 学习笔记(一)- 基础篇

Python无疑是目前数据科学和机器学习中应用最广泛的编程语言。针对python从入门到精通的详细教程也网上有很多。这两篇python入门博客(基础篇和进阶篇)主要是个人学习过程中做的简单笔记,便于记录和复习。关于基本概念和功能的介绍详见python官方文档。
 
一、简介
  优点:
  · “优雅”、“明确”、“简单”
  · 完善的基础代码库
  · 应用- 网络应用,小工具(脚本),封装其他语言程序包
  更多关于为何选择python作为编程语言,查看文章“人生苦短,为什么我要用python?
 
  缺点:运行速度慢(解释型);代码不能加密
 
二、基础操作
  本部分主要包括原始数据类型和运算符,变量和集合,流程控制和迭代器,函数和模块五部分。
# 版本Python 3.6

####################################################
## 1. 原始数据类型和运算符
####################################################

# 模除
% 3 # => 1
# x的y次方
2**4 # => 16
# 格式化字符串
"{} can be {}".format("strings", "interpolated")
#=> "strings can be interpolated"

# 重复参数
"{0} can 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"

####################################################
## 2. 变量和集合
####################################################

# a. 列表 list
li = [1, 2, 3, 4]
li[2] #访问
li = [1, 3, 4, '456', [1, 2, 3], {1: 'one', 2: 'two'}] #元素可以为不同类型

# 操作
li.append(1)     #最后追加元素
li.pop()         #尾部删除元素
li[始:终:step]    #列表切片
l_a.extend(l_b)  #添加

len(li) #列表长度
# 遍历
for i in li:
    print(i)
for i in range(len(i)):
    print(li[i])

# b. 元组 tuple
# 不可改变的序列
tup = (1, 2, 3)
tup[0]   #访问
tup + (4, 5, 6)    # => (1, 2, 3, 4, 5, 6)
tup[:2]            # => (1, 2)
a, b, c = (1, 2, 3)  # 可以把元组合列表解包,赋值给变量

# c. 字典 dict
# 用字典表达映射关系

# 初始化的字典
d = {'a': 1, 'b' : 2, 1: 'one', 2: 'two', 3: [1, 2, 3]}  #字典是无序的,hash表
print (d)

# 访问元素
d['a']
d[1]

# 字典的遍历
list(d.keys())     # => ["three", "two", "one"]
list(d.values())   # => [3, 2, 1]

for key in d:
    print(d[key])   #遍历值
for key, value in d.items():
    print (key, value)  #遍历键,值

# 字典操作
d.get("one")      # => 1
d.setdefault("five", 5)  # d["five"]设为5
d.update({"four":4}) 
del fd["one"]

# d. 集合 set
s_a = set([1, 2, 2, 3, 4, 5, 5]) #打印时会自动去重,且无序
s_b = set([4, 5, 6, 7, 8, 9])

#判断元素是否存在
in s_a

#添加元素
s_a.add(5) 

#并集
s_a | s_b
s_a.union(s_b)
 
#交集
s_a & s_b
s_a.intersection(s_b)

#差集 A - (A&B)
s_a - s_b
s_a.difference(s_b)

#对称差 (A + B) - (A & B)
s_a ^ s_b
s_a.symmetric_difference(s_b)

####################################################
## 3. 流程控制和迭代器
####################################################

# if else条件语句
some_var = 5
if some_var > 10:
    print("some_var比10大")
elif some_var < 10:    # elif句是可选的
    print("some_var比10小")
else:                  # else也是可选的
    print("some_var就是10")

# for循环语句遍历列表
for animal in ["dog", "cat", "mouse"]:
    print("{} is a mammal".format(animal))

# "range(number)"返回数字列表从0到给的数字
for i in range(4):
    print(i)

# while循环直到条件不满足
x = 0
while x < 4:
    print(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运行完没有错误的时候这句才会运行

####################################################
## 4. 函数
####################################################

# 用def定义新函数
def add(x, y):
    print("x is {} and y is {}".format(x, y))
    return x + y    # 用return语句返回

# 调用函数
add(5, 6)   # => 印出"x is 5 and y is 6"并且返回11

# 关键字参数来调用函数
add(y=6, x=5)   # 关键字参数可以用任何顺序

# 可变参数函数
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 setX(num):
    # 局部作用域的x和全局域的x是不同的
    x = num # => 43
    print (x) # => 43

def setGlobalX(num):
    global x
    print (x) # => 5
    x = num # 现在全局域的x被赋值
    print (x) # => 6

setX(43)
setGlobalX(6)

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]

####################################################
## 5. 模块
####################################################

# 用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)

未完待续...

 备注:目前写博客是为了进行知识和笔记梳理。博客本身可能还存在着一些错误,如有发现,请求斧正,谢谢。
 
 
posted @ 2018-08-21 15:40  eo_will  阅读(310)  评论(0编辑  收藏  举报