python整理-day4

1.Python基础

2.基本数据类型:str,dict,list,int

  s="wzc" =>str

3.函数式编程

  函数定义

  内置函数

    文件处理

注意:

li=[11,22,33,44]
def fi(arg):
    arg.append(55)
fi(li)
print(li)
li=fi(li)
print(li)

 结果:

[11, 22, 33, 44, 55]
None

 

这里需要说明的是,函数默认返回的是None,所以我们在使用的时候需要通过参数引用

 

4.其他

  三元运算

  lambda表达式

s="哈哈"

bytes(s,encoding=utf-8)



False:[],{},(),None,0,""

 

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc

def f1():
    pass

print(callable(f1))

 结果:

True

 

中文说明:检查对象object是否可调用。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。

注意:类是可调用的,而类的实例实现了__call__()方法才可调用。

版本:该函数在python2.x版本中都可用。但是在python3.0版本中被移除,而在python3.2以后版本中被重新添加。

 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc

a=chr(65)
print(a)

b=ord("B")
print(b)

结果:

A
66

 

可以找到ascii,也可以反向找出,数字转化为字母,字母转化为数字,这里面需要依赖ascii码的对应关系

 

产生随机数

andom.randrange这就是随机数字的范围.如果和chr相结合,就会有随机字母了,但是需要注意,acsii是有范围的,65-90就是大写字母的范围

这里面的范围,是1<=i<5的,所以在输入的时候需要后面一个加一位

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc

import random
li=[]
num=0
for  i  in range(6):
    r=random.randrange(0,5)
    if r == 2 or r == 4:
        c=random.randrange(0,9)
        b=str(c)
        li.append(b)
    else:
        c=random.randrange(65,91)
        b=chr(c)
        li.append(b)
        num=0
re="".join(li)
print(re)

结果:

RVXWKA

这种是产生数字和英文相结合的随机验证码

 

1.读取文件内容open,str到内存

2.python,把字符串=》编译=》特殊代码

3.执行代码

 

Compile,就是用来编译代码的

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc

s='print("123")'#将字符串编译成Python代码
r=compile(s,"string","exec")#这里的exec和下面的没有关系
print(r)
exec(r)#执行Python代码

 结果:

<code object <module> at 0x0000000000D16C90, file "string", line 1>
123

Single:把上面的代码,编译成单行的Python程序

eval:编译成表达式

exec:编译成一模一样的模式

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc

r1=exec("7+8+9")

print(r1)
r2=eval("7+8+9")#Eval:通过这个功能,可以将字符串,转化为表达式,并且去执行以下

print(r2)

 结果:

None
24

 

Exec:要比eval更牛逼,exec能执行所有Python代码和字符串,而eval只能执行表达式

但是eval比exec多一个功能就是,eval有返回值,而exec没有

 

快速查看对象提供了哪些功能

print(dir(list))

 

分页功能

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc

r=divmod(99,10)
print(r)

 结果:

(9, 9)

 

分页功能就是通过计算得到商,同时可以得到余数。返回的是一个元祖

 

对象是类的实例

对象"wzc","www"他们的类就是"str"

对象[11,22,33],["w","z","c"]他们的类就是list

以此类推dict的类大家也就知道了

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc

a=["a","b"]
r=isinstance(a,list)
print(r)

 结果:

True

 

Isinstance,判断对象是否是某个类的实例

这个和type 的区别,是isinstance是可以往上找,在基类里面会用到,而type不可以

 

filter(函数,可迭代的对象)

列表,元祖,字典,都是可迭代的对象

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc

li=[11,22,33,44,]

def f1(arg):
    if arg > 22:
        return True

ret=filter(f1,li)
print(list(ret))

 结果:

[33, 44]

 

在filter的内部,首先会去循环第二个参数,然后在每一次循环的内部执行第一个参数

#filter内部,循环第二个参数
#result=[]
#for  item in 第二个参数
#     r=第一个参数(item)
#    if r:
#        result(item)
#return result
#filter循环函数第二个参数,让每个循环元素执行函数,如果函数返回Ture,表示元素合法

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc

li=[11,22,33,44,]

def f1(arg):
    if arg > 22:
        return True

ret=filter(f1,li)
print(list(ret))

li=[11,22,33,44,]
ret1=filter(lambda a:a>33,li)
print(list(ret1))

ret=map(lambda a:a+100,li)
print(list(ret))

结果:

[33, 44]
[44]
[111, 122, 133, 144]

 

 这样就可以通过lambda表达式也可以实现相同的功能

map(函数,可迭代的对象(可以for循环的东西))

filter:函数返回Ture,并将元素添加到结果中

map:将函数返回值添加到结果中

 

frozenset():不可变集合

 

globals():所有的全局变量

locals():所有的局部变量

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc

s='wzcceqwediojdfiosjdjkfnjkwdhuiahjcnzkxcnx'

print(hash(s))

 结果:

1627539398160567879

 

在存储的时候,更多的是存一个hash值,其他语言也基本这样

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc
s="哈哈"
print(len(s))

b=bytes(s,encoding="utf-8")
print(len(b))

 结果:

2
6

 

Python3是按照字符,Python2是按照字节,python3即可以通过字符,也可以通过字节来查看

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc
s='{"k1":"v1"}'#里面必须是双引号,单引号不行
print(type(s),s)
import json
n=json.loads(s)#将一个字符串转换成Python基本数据类型{},[]
print(type(n),n)

 结果:

<class 'str'> {"k1":"v1"}
<class 'dict'> {'k1': 'v1'}

 

要通过json转换的话,里面的元素必须用双引号,单引号不行

 

Max():最大

Min():最小

Sum():求和

memoryview():和内存地址相关的一个类

object():一个类,所有类的副类

pow():求方,等同2**10==pow(2,10)

reverse():翻转,list.reverse()==reverse(list)

round():四舍五入

slice():取间隔,s="12345",print([0:2:2])功能相同

sorted():排序,list.sort()=sorted(list)

需要掌握的内置函数

 

装饰器:从外部装饰一个函数

开放封闭原则

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc

# def f1():
#     print("F1")
# def f2(xxx):
#     xxx()
# f2(f1)

def outer(func):
    def inter(*args, **kwargs):
        print("before")
        r=func(*args, **kwargs)
        print("after")
        return r
    return inter

@outer
def f1(arg):
    print(arg)
    return "haha"
r=f1("heihei")
print(r)
print("#")
@outer
def f2(a1,a2):
    print(a1,a2)
f2(11,12)

 结果:

before
heihei
after
haha
#
before
11 12
after

 

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc

def f1():
    print("F1")
def f2(xxx):
    xxx()
f2(f1)

 结果:

F1

 

函数是可以当做参数来做调用的,这里面的f1是执行的

 

def outer(func):
    def inter():
        print("before")
        func()
        print("after")
    return inter

@outer
def f1():
    print("F1")
f1()

 结果:

before
F1
after

 

@+函数

功能:

  1、自动执行outer函数,并将其下面的函数名f1当做参数传递

  2、将outer函数的返回值重新赋值给f1

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc



def outer(func):
    def inter(*args, **kwargs):
        print("before")
        r=func(*args, **kwargs)
        print("after")
        return r
    return inter

@outer
def f1(arg):
    print(arg)
    return "haha"
r=f1("heihei")
print(r)
print("#")
@outer
def f2(a1,a2):
    print(a1,a2)
f2(11,12)

 结果:

before
heihei
after
haha
#
before
11 12
after

 

fi有参数的时候,装饰器outer也需要跟着有参数才可以执行

当有多个参数的时候,就可以用**来处理

 

 

 

posted @ 2016-06-03 02:41  wzc1206  阅读(187)  评论(0编辑  收藏  举报