【小菜鸡学python】

零零散散知道些python的语法,但是没有系统的学习。今天开个系列好好学一下python~里面的知识点大多数是根据B站视频python编程基础入门【廖雪峰】_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili学习的。

  1. 注释
# 单行注释
"""
多行注释
多行注释
"""
'''
多行注释
多行注释
'''
  1. 解释器与编译器
    解释器:逐句翻译为可执行语句。资源有限情况下更好些,python考虑到跨平台,采用解释方式。
    编译器:整体拿来,全部翻译为可执行语句,然后再执行。性能更好些。

  2. 文件后缀
    .pyc python字节码文件 c:code-byte
    .pyo python优化文件 o:optimizing 执行效率更高

  3. 输出函数

a=100
print "a=%d" % a
print "a=",a

python2: print value
python3: print(value)

  1. 版本查看: python --version python3 --version

  2. 变量:本质为可修改的内存空间。在python中变量是关联一个对象的符号,包含一些可调用函数。命名以下划线或字母开头。

  3. 核心数据类型和内置对象
    1)数字类型包含复数类型。
    2)数字常量表示方法:

二进制:0b开头         eg:a=0b1101    a=13
八进制:0o开头         eg:a=0o17      a=15
十六进制:0x开头       eg:a=0x1A      a=26

3)浮点数(小数)
.907=0.907=9.07e-1(e-1表示10的2次方)
4)Bool类型:True值为1,False值为0。
5)空值 None,不属于任何类型。
6)C/C++中定义类型后不能再变,python中的变量均为对象,类型可变,动态、灵活。

  1. 算术运算符
a=10    b=3    
a/b=3.33333333(除:正常除(C/C++中若为整型,会截取。浮点型不截取))
a//b=3(地板除:截取小数点后面)
10**3=1000(**幂运算,表示10的3次方)
  1. 表达式:变量/常量+运算符组合而成。常量:只读,const。

  2. 程序四大部分:代码段、数据段、堆、栈。数据段中包含只读和普通的。

a=[1,2,3,4]    
b=a
a[0]=100      
a=b=[100,2,3,4]   

a和b均指向同一块内存区域,由于内存上的数据被修改了,所以修改a,b也发生变化。浅拷贝。原因:节省时间,但并不安全。

  1. 序列赋值语法:
a, b, c = 10, 20, "hello"
  1. is / is not
    判定两个变量是否绑定同一对象。
a=1;    b=1         
a is b     True
c=2;    d=c-1      
a is c     False      
a is d     True
  1. del 删除变量,同时解除与对象的关联。若对象不被任一变量引用,则释放对象空间。
a=1;    b=a;    c=a
del a;    del b   (删除变量a和b,解除对1的引用)
c=1 (c仍然可以引用1)
  1. 关系运算符 支持 2 < a < 5 这种格式

  2. 生成对象函数

a=123;  b="456";    
c=a+int(b)=579
b=str(123);    
b='123'
  1. type(x) 返回x的类型

  2. 预置的数值型函数:

取绝对值    abs(x)
四舍五入    round(x, n) n为小数向右取整的位数
幂运算      pow(x, y) x的y次方
  1. 条件语句:注意else if用elif表示,且条件语句后有冒号:
if  XXX:
    语句1
elif  XXX:
    语句2
else:
    语句3

条件表达式:

表达式1 if 真值表达式 else 表达式2
x=x if x > 0 else -x      等同于x=abs(x)
  1. pass语句,空语句,什么也不做,用来填补语法空白。

  2. 布尔运算
    1)运算符 not and or。不用!, &&, ||。在C里面&表示位逻辑与(两个数对应的每个位进行与运算),&&表示逻辑与(表达式逻辑关系与操作)

2)and运算符
表达式1 and 表达式2
优先返回为假值(False)的对象。当表达式1的值为True时,返回表达式2,若表达式2为假值返回表达式1。

0 and 100    返回0
100 and 200  返回200
100 and 0    返回0

3)or运算符
表达式1 and 表达式2
优先返回为真值(True)的对象。当表达式1的值为True时,返回表达式1,若表达式1为假值返回表达式2。

0 or 100    返回100
100 or 200  返回100
100 or 0    返回100
  1. bitmap位图:节省空间,I/O速度快,可存入cache(CPU与内存之间的高速缓存,CPU先去cache,再去内存)

  2. 位运算

位与10 & 20  = 0        0b01010
                        0b10100
                        0b00000

应用:IP地址与子网掩码
IP地址: 192.168.1.100
子网掩码: 255.255.255.0
与运算表示网段地址:192.168.1.0
或运算表示广播地址:192.168.1.255

位或10 | 20 = 30          0b01010
                          0b10100
                          0b11110
位异或10 ^ 20 = 30     0b01010
                       0b10100
                       0b11110

左移 10 << 2 = 40 左移2位,低位补0。相当于乘以2的2次方。10 << n表示10乘以2的n次方。

右移 10 >> 2 = 2 右移2位,相当于除以2的2次方,小数部分舍弃。10 >> n表示10除以2的n次方。
左移右移的应用:掩码mask,1 << 3 = 1000(二进制)
计算优化:

a = 6;      b = 4 
c=a*b=a << 2

a = 6;      b = 12
c=a*b=(a << 3) + (a << 2)      +优先级高于左移右移

a = 100;     b = 8
c=a%b=a&7(高位均为8的倍数,只取后三位)

按位取反 ~ 0b1010 = 0b0101

bin(x)将x转换为二进制的字符串。

  1. 成员运算符
in / not in
a=[1,2,4,8]     4 in a      10 not in a
  1. 多条语句写在同一行中间需要; print(x); c=a+b
    折行符 \ 放在一行的末尾,表示下一行也是本行的语句

  2. 基本输入输出

输入 input()
a=input()     输入进去的是字符串,想要整型a=int(input())或int(a)

输出函数

print(1,2,3)    
1 2 3
print(1,2,3, sep=',')    
1,2,3
print(1,2,3, sep=',',end='a')    
1,2,3a
print(1,2,3,file=sys.stdout)    
1 2 3    输出在屏幕(默认)
  1. 循环语句
while 真值表达式:
       语句1
else:(可省略)
       语句2

for循环语句(更常用,也称范围for语句,避免超出内存)
可迭代对象包括:字符串、列表、元组、字典、集合等。

for 变量列表 in 可迭代对象:
      语句1
else:(可省略)
      语句2
range()函数
for i in range(10):        [0,10)
for i in range(1,10,2):    [1,3,5,7,9]    步长为2

range()创建会消耗时间,占用空间。

  1. 字符串str(string) 以\0为结束符
    表示方法
a='hello'      
a="hello"      
a='''hello''' (可换行)     
a="""hello""" (可换行)

字符串分割,a.split(" ")以空格分割

  1. raw转义失效
b="\""        
"
b=r"\""      
\\"
  1. ascii编码 0~127
    扩展ascii编码 0~256 高位为1
    Unicode编码:国际编码
    utf-8编码:单字节第一位为0,后7位ascii。
    GB2312 编码:256*256=65536。小于127与ascii相同,约能表示7000汉字
    GBK编码:国标扩展编码。扩展20000新的汉字。与utf-8不兼容。

python源码默认存储方式为ascii

Linux推荐utf-8 #coding=utf-8
Windows推荐GBK #coding=gbk

#coding=utf-8      放在第一行,表示代码存储方式为utf-8,编码格式为unicode。
a=u"你好"     使用unicode编码作为中间媒介

utf-8 -> unicode -> gbk -> unicode -> utf-8 ......
\u表示 unicode16位

string.encode('gbk')      unicode转gbk
string.decode('gbk')      gbk转unicode
  1. 字符串处理
1)a="123"+"456"      
"123456"

2)a="123"*2             
"123123"

3)字符串的> 、<比较,比较其ascii码值。

4)a="1234567890"    切片操作
a[3:6]='456'         [3,6)
a[3:]='4567890'      
a[3::2]='4680'       步长为2
a[-1::-1]='0987654321'    逆序
[起始:终止:步长]

5)a.isdigit() / isalpha() / islower() /isupper()       判断字符串是否全为数字/英文字符/小写/大写
a.center(10,' ')         字符串居中,长度为10,不足部分用' ' 补齐
a.count('str',index)     计算在a中从index开始str子串出现次数,index可省略。不存在即为-1。
a.lower() / upper()      转换为小写/大写
a.replace("123","aaa")   将原字符串中的123替换为aaa
  1. 列表
    list可以看作是一种支持泛型的序列。
空列表:L=[]      L=list()

非空列表:L=[1,2,"hello",3.0,[4,5,6] ]

a=list('hello')      
a=['h','e','l','l','o']    对字符串进行拆分

a=[1,2,3]         b=[4,5,6]        
a+b=[1,2,3,4,5,6]  

列表的比较,各个位进行比较。

string不支持元素的赋值,list支持。

切片赋值:
a=[1,2,3];      a[0:2]=[100,200,300]      
a=[100,200,300,3]      步长为1则连续替换。步长不为1,则逐位替换,替换的位数必须一致。

常用函数:a=[1,2,3,4]    
len(a) / max(a) / min(a) / sum(a)  返回长度/最大/最小/求和

属性方法:

a.index(v)                     返回下标
a.add(v)                       增加元素
a.contain(v)                   判断包含
a.remove(v)                    删除第一次出现
a.insert(index,v)              在index位置添加v元素
a.clear()                      清空
a.sort(reverse=False)          排序(默认升序,否则用参数)
a.reverse()                    列表反转
a.pop()  / a.pop(index)        列表末尾元素出栈 / 索引为index元素出栈
a.copy()                       列表元素拷贝(浅拷贝)
浅拷贝示例:
a=[1,2,3,4];      b=[100,200,a,300];      c=b.copy()
b[0]=10000 
output:
b=[10000,200,[1,2,3,4],300]        
c=[100,200,[1,2,3,4],300]

a[0]=10000  
output:
b=[100,200,[10000,2,3,4],300]    
c=[100,200,[10000,2,3,4],300]

深拷贝,有自己独立的内存空间

import copy
a=[1,2,3,4];      b=[100,200,a,300];      c=copy.deepcopy(b)
b[0]=10000 
output:
b=[10000,200,[1,2,3,4],300]        
c=[100,200,[1,2,3,4],300]

a[0]=10000  
output:
b=[100,200,[10000,2,3,4],300]    
c=[100,200,[1,2,3,4],300]

列表是可迭代的对象

L=[2,3,5,7]
for x in L:
   print(x)

列表推导式

a=[1,2,3,4,5,6]
L=[i**2 for i in x]
[1, 4, 9, 16, 25, 36]

L=[i**2 for i in range(1,11)]     #1到10的平方
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

L=[i**2 for i in range(1,11) if i % 2 == 0]     #2,4,6,8,10的平方
[4, 16, 36, 64, 100]

x=[10,20,30]
y=[3,4,5]
Z=[i*j for i in x for j in y]
[30, 40, 50, 60, 80, 100, 90, 120, 150]
  1. 元组 tuple,不可改变的序列,即只可读的List
t=()
t=tuple()
t=(1,2,"hello")

a,b = 10,20
a,b = b,a    
两数值交换不借助额外存储空间能否成功?
可以。
1)加减法。但可能出现溢出问题
```python
a=a+b;
b=a-b;
a=a-b

2)通过异或操作

a=a^b
b=a^b    b=a^b^b  任何数x^x=0   b=a^b^b=a
a=a^b    a=a^b^a  a=b
  1. 字典(dict)逻辑存储方式不是连续的,采用树的数据结构。
    1)字典是一种可变的容器,可存储任意类型的数据
    2)每个数据用键-key进行索引,不可用下标索引
    3)字典的存储是无序的
    4)数据以键值对key-value形式进行存储,key是唯一的,value可重复
    5)表示方式以{}括起来
    6)字典中的key必须为不可变类型的值:
    不可变类型:bool, int, float, complex, str, tuple, frozenset(固定集合)
    其中不可变表示其字面值不可变。
    可变类型:list, dict, set
d={}
d=dict()
d={"name": "dong", "age":22, "score":100.0}
d["name"]=dong
d["age"]=22
d["gender"]=male    若没有这个key,则新建。
d={"name": "dong", "age":22, "score":100.0}
for k,v in d.items():      #d.items()返回可迭代的dict_items对象,类似还有d.keys(),d.values()
    print(k," ",v

name   dong
age   22
score   100.0
  1. 集合(set)
    1)集合是可变的容器
    2)集合内数据对象都是唯一的,不能重复。
    3)集合是无序的存储结构
    4)相当于只有键,没有值的字典。也使用{}
    5)集合内的元素必须为不可变得对象
a={1,2,3}
b={2,3,4}
a | b = {1,2,3,4}  并集
a&b = {2,3}  交集

固定集合frozenset,内部元素不可改变。

  1. 函数(function)
    1)函数本身也是一个变量,该变量类型是可调用类型,只读。
    2)函数有自己的命名空间,若让函数处理外部的数据需要用参数传给函数
    3)函数代码块部分不能省略,若为空语句需要填充pass
    4)若不包含return,则返回None
    5)函数调用作为模块内部语句时,必须先定义函数,后调用函数
    6)可返回多个值,如return (max, min),类型为元组tuple。
    7)函数定义的结束,缩进与函数相同的语句。
    8)关键字传参:fun(a=1,b=2,c=3) 或 fun(b=2,c=3,a=1) 与顺序无关。但fun(b=2,a=1,3)错误,缺少关键字。
    9)序列传参:
    序列类型:list、tuple、string作为参数列表
fun(a,b,c)
L=[1,2,3]
fun(*L)   等同于  fun(L[0],L[1],L[2])

10)字典关键字传参

d={"age":22, "name":"dong","gender":"male"}
fun(**d)

11)缺省参数:函数的形参被赋予默认值,在函数调用时,若无实参传递值,则使用默认值计算。缺省参数其右侧均为缺省参数。
12)不定长参数
a)星号元组形参

def myfun(*args):
  print(args)
  for x in args:
    print(x)
myfun("12",3,4,"hello")

('12', 3, 4, 'hello')
12
3
4
hello

b)双星号字典形参

def myfun(**kwargs):
  print(kwargs)
  for k,v in kwargs.items():
    print(k,":",v)
myfun(name="dong",age=22)

{'name': 'dong', 'age': 22}
name : dong
age : 22
  1. 可变类型:里面的元素可变,只修改对应内存的值。
    列表list、集合set、字典dict

  2. 不可变类型:更改时释放原内存空间,再申请新的内存空间。
    frozenset、tuple、str、numbers(int、float)

  3. python在函数外部定义的变量为全局变量,但只影响当前模块(当前.py文件)。函数内部定义的变量为局部变量,包含函数参数。

  4. python作用域的四个分类
    1)局部作用域(函数内)
    2)外部嵌套函数作用域
    3)函数定义所在模块(文件)作用域(全局作用域)
    4)python内置模块的作用域(doc文件开头""" """内的注释)
    范围依次增大
    若想要在函数中修改全局变量,则需声明global。且函数中参数不能与全局变量同名。

global说明:
1)全局变量若要在函数内部被赋值,必须经过全局声明,否则被认为是局部变量。
2)全局变量在函数内部不经过声明就可以直接读取访问(不可改写)
3)不能先声明局部变量,再用global声明为全局变量
4)global变量列表的变量名不能出现在此作用域的参数列表里

v=100
def fun():
  global v
  v=200
fun()
print(v)
200

nonlocal:告诉解释器,nonlocal声明的变量不是局部变量也不是全局变量,而是外部嵌套函数内的变量。

locals()返回所有局部变量
globals()返回所有全局变量

  1. 模块化:大的功能拆分为小的模块。组件化:小的函数通过组合形成新功能。

  2. map函数
    map(func, *iterable)对于迭代器中的每个元素执行func函数,并返回一个map类型。

def power2(x):
  return x**2

X=map(power2,range(1,11))
for i in X:
  print(i,end=" ")
print(X)

1 4 9 16 25 36 49 64 81 100 <map object at 0x000002E0B0B7B358>
  1. sorted函数
    sorted(iterable, key=None, reverse=False) 默认升序
    key函数用于提供一个值,这个值作为排序的依据。
L=[5,-8,4,3,6]
L2=sorted(L)
print(L2)
[-8, 3, 4, 5, 6]

L2=sorted(L,reverse=True)
print(L2)
[6, 5, 4, 3, -8]

L2=sorted(L,key=abs)
print(L2)
[3, 4, 5, 6, -8]

name=["dong","yu","yue","di","xi"]
name2=sorted(name)
print(name2)
['di', 'dong', 'xi', 'yu', 'yue']

name2=sorted(name,key=len)
print(name2)
['yu', 'di', 'xi', 'yue', 'dong']
  1. lambda表达式(匿名函数)
    作用:创建一个无名的函数对象。与def类似,但不提供函数名。通常应用于较少次数使用该函数,用完拉倒,无需费力起名字。
myadd = lambda x,y : x+y      #作用等同于def myadd(x,y): return x+y
print(myadd(100,200))
300
  1. 闭包:若一个内嵌还是访问函数外部作用域的变量,则这个函数就是闭包。
def make_power(x):
  def fun(arg):
    return arg**x
  return fun

f1 = make_power(2)
print(f1(3))
9
print(make_power(2)(3))
9
  1. 装饰器:是一个函数,用来包装另一个函数或类。包装的目的:在不改变原函数名的情况下,改变被包装函数(对象)的行为。
def deco(fun):
  print("装饰器被调用")
  return fun

@deco       #若去掉@deco,则只打印myfun
def myfun():
  print("myfun")
myfun()
#加上@deco相当于myfun=deco(myfun)
装饰器被调用
myfun

再举个栗子

def msg_device(fun):
  def save_money2(name,money):
    print("hello,",name)
    fun(name,money)
    print("Goodbye")
  return save_money2

@msg_device
def save_money(name,money):
  print(name,"save",money)

save_money("dong",1024)

hello, dong
dong save 1024
Goodbye

结合不定参数使用效果更佳~能够装饰有任意个参数的函数。

def deco(fun):
  def _deco(*args,**kwargs):
    print("before",fun.__name__)
    fun(*args,**kwargs)
    print("After",fun.__name__)
  return _deco

@deco
def myfun1(name,money):
  print(name,"save",money)

myfun1("dong",1024)

@deco
def myfun2(name,money,gender):
  print(name,"save",money,"gender is ",gender)

myfun2("yu",1024,"female")

before myfun1
dong save 1024
After myfun1
before myfun2
yu save 1024 gender is  female
After myfun2
  1. 函数的属性(所有函数都继承了一个原函数,包含以下属性)
    1)name 记录函数名
    2)doc 函数的文档(第一行注释)

  2. 模块(module)
    1)包含一系列变量、函数、类等组成的程序组
    2)模块是一个文件,模块文件名通常以.py结尾。
    .py -> .pyc -> .pyo ->pvm(解释变为字节文件,变为目标文件,变为虚拟机)
    .c -> .i -> .s -> .o -> bin(预处理,编译,汇编,链接变为二进制)
    分类:
    1)内置模块,解析器内部可直接使用
    2)安装的标准库模块
    3)第三方模块(开源)
    4)自己编写的模块

1)模块的导入 import,将模块整体导入到当前模块

2)dir(obj)函数,返回模块所有属性的字符串列表。

3)from 模块名 import 模块属性名:将模块内的一个或多个属性导入当前模块 。
若用import只是导入了当前模块,若使用内部的函数仍需要以“模块名.函数()”来调用。若用from import来导入则将内部的属性和函数全部导入,可直接使用其内部的函数。举个栗子:

import math
print(math.sin(3.1415926/2))

0.9999999999999997

from math import *
print(sin(3.1415926/2))

0.9999999999999997

对于被执行的主模块,模块名为main

  1. 包(package)
    1)包是将模块以文件夹的组织形式进行分组管理的方法。
    2)作用:将一系列模块进行分类管理,防止命名冲突。可以在需要时加载一个或部分模块,而不是全部模块。
    3)相比于目录,包内包含init.py。
    4)init.py作用:在包被加载时自动调用。在内部填写包的文档字符串。加载此包所依赖的一些其他模块或包

  1. 类的创建语法
    class 类名(继承列表):
    "类文档字符串"
    实例方法(只有类实例化的对象可以使用)
    类变量
    类方法(类和实例化对象都可使用)
    静态方法
    class本身也是个对象,class实例化也是个对象。二者不同

1)实例变量
定义语法:self.变量名 一般在init.py中定义,通过传参来初始化。
def init(self,x1,x2,x3): 第一个参数必须为self

2)实例方法
class 类名:
def 实例方法名(self,x1,x2):
a)实例方法实质是函数,是定义在类内的函数
b)实例方法属于类的属性
c)实例方法的第一个参数代表调用这个实例方法的对象,一般为Self

3)调用方法:
实例.实例方法名(参数) dog1.say
类名.实例方法名(实例, 参数) Dog.say(dog1)

4)构造方法:创建对象时初始化实例变量
a)构造方法名必须为init,不可改变
b)在一个类中只能有一个init构造方法
c)构造方法在实例创建时自动调用,且将实例自身通过第一个参数slef传入init方法
d)构造方法若没有return语句,则返回self自身。

析构方法:在对象销毁时被自动调用
del(self):

5)类变量
a)在类class内定义的变量,此变量属于类,不属于此类的对象(实例)
b)类变量,可以通过该类直接使用
c)类变量可以通过类的实例直接访问
d)类变量可以通过此类的对象的class属性间接访问

6)类方法:需要添加@classmethod
与实例方法的区别:
类方法能够访问类变量,不能访问实例变量;
实例方法能够访问类变量,也能访问实例变量。

类方法可以用实例来调用,也可以用类来调用;
实例方法调用时必须传入实例。

7)isinstance(obj,类)
判断这个对象是否为某个类的对象,是返回true。
id(obj)函数
返回对象的id(地址)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • 特点 易于学习:Python 有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。 易于阅读:P...
    程序大员阅读 570评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,485评论 16 22
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,551评论 0 11
  • 可爱进取,孤独成精。努力飞翔,天堂翱翔。战争美好,孤独进取。胆大飞翔,成就辉煌。努力进取,遥望,和谐家园。可爱游走...
    赵原野阅读 2,715评论 1 1
  • 在妖界我有个名头叫胡百晓,无论是何事,只要找到胡百晓即可有解决的办法。因为是只狐狸大家以讹传讹叫我“倾城百晓”,...
    猫九0110阅读 3,255评论 7 3