python基础(四)

内置函数

  • callable() #判断是否能够被调用执行,可以调用返回True,例如函数和类
  • chr() #将ascii值转换为字符,例如print(chr(65) )输出为a
  • ord()#将字符转换为ascii值,例如print(ord('a')) 输出为97
  • chr和ord应用随机生成验证码 
  • #随机生成数字和大写字母的验证码
    import  random
    li = []
    for i in range(6):
        r = random.randrange(0,5)
        if r == 2 or r== 4:
            num = random.randrange(0,10)
            li.append(str(num))
        else:
            temp = random.randrange(65,91)
            c = chr(temp)
            li.append(c)
    resault = "".join(li)
    print(resault)
    #第二位和四位为数字
    # li = []
    # for i in range(6):
    #     if i == 2 or i == 4:
    #         num = random.randrange(0,10)
    #         li.append(str(num))
    #     else:
    #         temp = random.randrange(65,91)
    #         c = chr(temp)
    #         li.append(c)
    # resault = "".join(li)
    # print(resault)
  • compile() #将字符串编译为python代码,执行python代码,接收代码或者字符串
  • s = 'print(123)'
    #编译,single,eval,exec
    #将字符串编译为python代码
    r = compile(s,"<string>","exec")
    #执行python代码
    exec (r)
    输出为
    123
  • exec() #执行python代码,无返回值
  • eval() #将字符串转换为表达式,并把结果计算出来,有返回值;ret = eval('7+8+9');print(ret) 输出为24
  • dir() #快速查看对象提供了哪些功能,print(dir(list))
  • help() #查看帮助信息,详细的使用说明,包括对象功能方法带的参数等print(help(list))
  • divmod() #接收2个参数,前一个参数对后一个参数求余操作,结果将整数和余数打印出来r = divmod(97,10);print(r)输出(9, 7)商9余7
  • isinstance() #判断对象是否为某一个类的实例,属于返回True否则返回False
  •  li = [1,2,3,4]
    resault = isinstance(li,list)
    print(resault)
    #输出
    True
    
    #如果li属于list类返回True
  • filer() #对筛选出来的结果进行函数操作,filter执行内部循环第二个参数,让每个循环元素执行函数,如果函数返回值为True表示元素合法;filter('函数','可迭代的对象')
  • #完全函数方式实现返回列表中大于22的元素
    def f1(a):
        resault = []
        for item in a:
                if item >22:
                    resault.append(item)
        return  resault
    l1 = [11,22,33,44,55]
    ret1 = f1(l1)
    print(ret1)
    #filer+函数返回列表中大于22的元素
    def f2(a):
        if a > 22:
            return  True
    li = [11,22,44,33,66]
    ret = filter(f2,li)
    print(list(ret))
    #通过fileter+lamda表达式来实现
    l2  = [11,22,44,55,66]
    resault = filter(lambda a:a>33,l2)
    print(list(resault))
  • map() #批量将迭代对象中的元素进行操作,map('函数','可迭代对象(可以for循环的东西)');
  • #通过整个函数实现对列表中数据全部加100操作
    li = [11,22,33,44,55]
    def f1(args):
        resault = []
        for i in args:
            resault.append(100+i)
        return resault
    r = f1(li)
    print(r)
    #函数方式map使用形式
    li = [11,22,33,44,55]
    def f2(a):
        return  a+100
    resault = map(f2,li)
    print(list(resault))
    #lambda方式map使用形式
    li = [11,22,33,44,55]
    resault = map(lambda a:a+100,li)
    print(list(resault))

    #filter 函数返回True,将元素添加到结果中
    #map 将函数返回值添加到结果中
  • locals()#所有局部参数集合
  • globals() #所有全局变量参数集合
  • hash()#pyhon中存储字符串都是通过此函数计算的哈希值来存储的
  • len()#计算字符串的长度,py2中以默认字节来计算长度,py3中以默认字符来计算长度
  • #验证py3中输出情况
    s = "张三"
    print(len(s))
    b = bytes(s,encoding='utf-8')
    print(len(b))
    
    2
    6
    #py3.5中循环汉字时候正常输出
    for i in '张三':
        print(i)
    张
    三
    #py2.7中循环汉字时候出现乱码
    for i in '张三':
        print(i)
    �
    �
    �
    �
    �
    �
  • # 字符串转换字节类型
    #位,字节,汉字的关系
    # 1、bit:位  
    #     一个二进制数据0或1是1bit
    # 2、byte:字节
    #     存储空间的基本计量单位 如:MySQL中定义 VARCHAR(45)  即是指 45个字节
    #     1byte = 8bit
    # 3、一个英文字符占用1个字节
    #     1字母 = 1byte = 8bit
    # 4、一个汉字占用2个字节(GBK中)
    # 5、标点符号
    #      汉字输入状态下,默认为全角输入方式;
    #      英文输入状态下,默认为半角输入方式;
    #      全角输入方式下,标点符号占2字节;
    #      半角输入方式下,标点符号占1字节;
    
    # utf-8 一个汉字:三个字节
    # gbk 一个汉字:二个字节
    # utf-8
    s = "张三"
    # 一个字节8位,一个汉字三个字节
    # 字符串转换字节类型
    # bytes(要转换的字符串,编码形式)
    n = bytes("张三", encoding="utf-8")
    print(n) #b'\xe6\x9d\x8e\xe6\x9d\xb0' utf-8一个汉字占用3个字节
    n = bytes("张三", encoding="gbk")
    print(n) #b'\xc0\xee\xbd\xdc' GBK一个汉字占用2个字节
    # 字节转化成字符串
    new_str = str(bytes("张三", encoding="utf-8"), encoding="utf-8")
    print(new_str)

    字节与字符:

    • ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。
    • UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。
    • Unicode 编码中,一个英文为一个字节,一个中文为两个字节。
    • 符号:英文标点为一个字节,中文标点为两个字节。例如:英文句号 . 占1个字节的大小,中文句号 。占2个字节的大小。
    • UTF-16 编码中,一个英文字母字符或一个汉字字符存储都需要 2 个字节(Unicode 扩展区的一些汉字存储需要 4 个字节)。
    • UTF-32 编码中,世界上任何字符的存储都需要 4 个字节。

    python encode和decode函数说明

    字符串转为字节类型,

    str='ssssss'

    s1_byte = str.encode()

    字节转换为字符串类型

    s1_str = s1_byte.decode()

     

     

  • max() #取参数中最大的值,参数值均为int类型数字
  • min()#取参数中最小的值
  • sum()#求和
  • pow() #求平方等价于** 例如2**10==pow(2,10)
  • reversed()#对参数中元素反向显示在列表中等价于list.reverse()
  • #li.reverse()与reversed(li)是等价的
    li = [11,22,1,3,5,2]
    li.reverse()#对列表顺序反向输出
    print(li) #[2, 5, 3, 1, 22, 11]
    print(list(reversed(li))) #[11, 22, 1, 3, 5, 2]
    #sort和sorted对列表中元素进行大小排序
    li = [11,22,1,3,5,2]
    li.sort()
    print(li) #sort表示对自己的列表操作
    
    li2 = sorted(li)
    print(li2) #sorted表示作为一个新的列表排序
  • round() #四舍五入函数print(round(1.4)) 输出1
  • zip() #将多个列表合并为1个
  • #zip函数将三个列表进行了合并,当其中一个列表元素数量和其他列表元素个数不等时,新的列表以少的元素为准,不会将没有的元素列作为新的元素
    l1 = ['lily',11,22,33]
    l2 = ['is',11,22]
    l3 = ['a girl',11,22,33]
    r = zip(l1,l2,l3)
    print(list(r))
    #输出:
    [('lily', 'is', 'a girl'), (11, 11, 11), (22, 22, 22)]
    
    #对列表中元素进行join合并
    l1 = ['lily',11,22,33]
    l2 = ['is',11,22,33]
    l3 = ['a girl',11,22,33]
    r = zip(l1,l2,l3)
    temp = list(r)[0]
    ret = ' '.join(temp)
    print(ret)
    #输出:
    lily is a girl

函数相关--装饰器

用法:

  @+函数名

功能:

  1. 自动执行装饰器定义的函数并且将其下面的函数名当作参数传递
  2. 将装饰器定义函数的返回值,重复赋值给下面的函数

例子:

#定义一个简单装饰器
def outer(func):
    def inner():
        print('before')
        func()
        print('after')
    return inner
@outer
def f1():
    print('F1')

#调用装饰器中的函数
import test #上面装饰器文件名称为test.py
test.f1()
#输出
before
F1
after

装饰器的应用登陆的练习

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

LOGIN_USER = {'is_login':False}

def outer(func):
    def inner(*args,**kwargs):
        if LOGIN_USER['is_login']:
            r = func()
            return  r
        else:
            print("请登陆")
    return inner


def outer1(func):
    def inner(*args, **kwargs):
        if LOGIN_USER['is_login'] and LOGIN_USER['user_type'] == 2:
            r = func()
            return r
        else:
            print("请登录,或者权限不够")
    return inner

@outer1
def order():
    print('欢迎%s登录'%LOGIN_USER['current_user'])


@outer
def changepwd():
    print('欢迎%s登录' % LOGIN_USER['current_user'])

@outer
def manager():
    print('欢迎%s登录' % LOGIN_USER['current_user'])

def login(user,pwd):
    if user == 'ljb' and pwd == '123':
        LOGIN_USER['is_login'] = True
        LOGIN_USER['current_user'] = user
        manager()

def main():
    while True:
        inp = input("1后台管理:2,登录")
        if inp == '1':
            manager()
        elif inp == '2':
            username = input("请输入用户名:")
            pwd = input("请输入密码:")
            login(username,pwd)


main()

 

posted @ 2016-05-30 11:16  Jabe  阅读(409)  评论(0)    收藏  举报