python02-函数

http://www.cnblogs.com/wupeiqi/articles/5453708.html

三元运算符

#三元运算符
num = 60
ret = 100 if num > 100 else num
print(ret)

set集合

  • set集合是无序无索引不可重复的
s = set([11,22,33,44,55])
print(s)
# ==> {33, 11, 44, 22, 55}
  • set集合可以修改,如果重复添加,只会保存一个
  • 创建空的set集合
s = set()
print(type(s)) # {} type = set
s = {}
print(type(s)) # {} type = dict
# 如果通过第二种方式创建,默认创建的是字典,所以创建空的set集合用第一种方式
  • 创建set集合
s = set('abcdefg')
print(s)
s = set([11, 22, 33, 44])
print(s)
s = set(('aa', 'bb', 'cc'))
print(s)
# ===>
{'e', 'b', 'g', 'a', 'c', 'f', 'd'}
{33, 11, 44, 22}
{'bb', 'aa', 'cc'}
# 参数的类型必须是可迭代的
  • set集合的方法
    • add(arg):添加元素,如果set集合里有,则不会重复保存
s = set() # 创建一个空的集合
num1 = -10000
print("num1的内存地址为:", id(num1))  # 内存地址:16377440
s.add(num1)
num2 = -10000
print("num2的内存地址为:", id(num2))  # 内存地址:16377456
s.add(num2)
getNum = s.pop()
print("获取最新的内存地址:", id(getNum)) # 内存地址为第一次添加的地址,第二个没有保存进去
    • clear:清空集合
    • difference:比对像个集合A.difference(B),把A有B没有的元素返回到新给集合
    • difference_update:比对A、B集合,把A中与B公共的元素去除,直接操作A集合
A = set([11,22,33,44,55,66])
B = set([11,33,55,77,99])
return_set = A.difference(B)
print(return_set)   # {66, 44, 22}

A.difference_update(B)
print(A)            # {66, 44, 22}

    • discard:丢弃,删除,若不存在不会报错
    • remove:移除,若不存在则报错
s = {11,22,33,44,55,66}
s.discard(11)
print(s)
s.discard(77)
print(s)
s.remove(22)
print(s)
s.remove(99)
print(s)
    • updata:更新,参数为可迭代类型,内部通过for循环add进入
s = set()
li = [11, 22, 33, 44, 55, 66]
s.update(li)
print(s)
string = 'Hello_World'
s.update(string)
print(s)
    • issupset:是否是父集合
    • issubset:是否是子集合
s1 = {11, 22, 33, 44}
s2 = {11, 22, 33, 44, 55, 66, 77, 88}
print(s1.issubset(s1))
print(s2.issuperset(s1))
===>
True
True
    • pop:移除元素并返回值,由于set集合是无序的,删除的元素不一定是新增的元素
# pop:删除元素并返回值
s = {11, 22, 33, 44, 55, 66}
print(s)
popEle = s.pop()
print(popEle)
    • isdisjoint:是否没有交集,没有交集返回True
    • symmetric_difference:对称差集,把两个集合合并,同时去除交集
    • union:并集
    • update:更新,接收可迭代参数

深浅拷贝

  • 对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址
import copy
# ######### 数字、字符串 #########
n1 = 123
# n1 = "i am alex age 10"
print(id(n1))
# ## 赋值 ##
n2 = n1
print(id(n2))
# ## 浅拷贝 ##
n2 = copy.copy(n1)
print(id(n2))
  
# ## 深拷贝 ##
n3 = copy.deepcopy(n1)
print(id(n3))
# ===>
1485856400
1485856400
1485856400
1485856400
  • 对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。
    • 赋值
n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
  
n2 = n1
  • image
    • 浅拷贝
    • 浅拷贝,在内存中只额外创建第一层数据
import copy
n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
n3 = copy.copy(n1)
  • iamge
    • 深拷贝
    • 深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)
import copy
n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
n4 = copy.deepcopy(n1)
  • iamge

函数

  • 函数式编程最重要的是增强代码的重用性和可读性
  • 参数类型
    • 普通参数
    • 默认参数
      • 注:默认参数需要放在参数列表最后
    • 动态参数
def func(name, age=18):
    print(name)
    print(age)

func("你好,世界")
func("Hello World", 19)  # 注:默认参数需要放在参数列表最后
def func(*args):
    print(args)
func(1, 2, 3, 4, 5, 6, 7)
func(*[11,22,33,44,55,66]) # 直接传入可迭代的类型,在前面加 * 

# 打印是一个元组
def func(**kwargs):
    print args

# 执行方式一
func(name='余浩宏', age=20, gender='man')

# 执行方式二
dic = {'name': '张三', 'age': 19, 'gender': 'man'}
func(**dic) # 直接传入字典,在前面加入** 
  • 字符串、字典、列表最重要
  • set集合没它们这么重要

lanbda表达式

  • lanbda表达式只适用于简单的函数,不能表示复杂的函数表达式
  • 函数名 = lanbda : 函数体
  • 函数名 = lanbda 参数1,参数2,... : 返回值
fun = lambda str, num: int(str) + num
ret = fun('100', 100)
print('reslut is',ret)

内置函数

  • 10进制转其他进制

    • int():转成10进制
    • hex():转成16进制
    • bin():转成2进制
    • oct():转成8进制
    ten2bin = bin(100)
    print(ten2bin) # 0b1100100
    
    ten2eight = oct(100)
    print(ten2eight) # 0o144
    
    ten2hex = hex(100)
    print(ten2hex) # 0x64
    
  • 其他进制转10进制

    • int(str, base=2/8/10/16)
    bin2ten = int("0x64",base=16)
    print(bin2ten)
    
  • str -- bytes转换

    b = bytes('HelloWorld', encoding='utf-8')
    s = str(b, encoding='utf-8')
    print(s)
    
  • isinstance():判断实例是否属于这个类

  • all():传入interable参数,底层循环遍历所有的值,如果都为True,则返回True

    • False 、 None 、 [] 、{} 、'' 、0 、"" 为False
    """
    Return True if bool(x) is True for all values x in the iterable.
    If the iterable is empty, return True.
    """
    ret = all([1,2,3,0]) # 有0为False
    print(ret)
    
  • any():和all一样,如果有一个为True,则返回True

    • False 、 None 、 [] 、{} 、'' 、0 、"" 为False
    """
    Return True if bool(x) is True for any x in the iterable.
    If the iterable is empty, return False.
    """
    
  • ascii():传入对象,会自动调用对象的__repr__方法,或去返回的值

  • boolean():根据传入的参数转为boolean

    b = bool(0)# False
    b = bool(1)# True
    b = bool('')# False
    b = bool([])# False
    b = bool({})# False
    b = bool(None)# False
    
  • abs():取绝对值

  • bytes:

  • bytesarr:

    • 将字符串转为字节和字节数组,类似与字符串和列表
    b = bytes('string', encoding='utf-8')
    print(b)
    for i in b:
        print(i, "", end='')
    print('')
    bs = bytearray('string', encoding='utf-8')
    for i in bs:
        print(i, "", end='')
    #115 116 114 105 110 103 
    #115 116 114 105 110 103 
    
  • chr():传入数字,转成acsii对应的字符

  • ord():传入字符,返回acsii对应的编码

    • 只适用于ascii码表
    chart = chr(65)
    print(chart) # A
    order = ord('a')
    print(order) # 97
    
  • str():

  • callable():是否和执行,传入的对象后面加()是否有代码执行

    • 如:创建对象,调用方法
  • compile(str):编译,将字符串传入,编译成代码执行

  • dir():查看方法

  • help():查看详情

  • divmod():除法,返回一个tuple(商,余),用于分页

    ret = divmod(10, 3)
    print(ret) # (3, 1)
    
  • eval():执行字符串代码,有返回值(简单)

    • 在一些excle文档中有这样的需求:
    string = '1 + 3'
    ret = eval(string)
    print(ret)
    
  • exec():执行字符串代码,没有返回值(复杂)

    string = '''
    for i in range(10):
        print('Hello World')
    '''
    exec(string)
    
  • filter('函数',iterable):

    • 参数1为过滤函数,范围值通过boolean()转换为True,则保存起来,否则不保存
    • 参数2为可迭代类型,通过for循环取出来作为参数传入函数
    • 返回值为函数结果为True的参数,通过迭代可以取值
    li = [11,22,33,44,55]
    ret = filter(lambda num:True if num > 22 else False, li)
    for i in ret:
        print(i) # 33 44 55
    
  • map('函数',iterale):

    • 函数没有返回值
    • 参数通过for循环取出来作为参数传入函数
    li = [11,22,33,44,55]
    
    def addMethod(num):
        num += 100
        return num
    ret = map(addMethod, li)
    
    for i in ret:
        print(i)
    
  • globals():获取所有的全局变量

  • locals():获取所有的局部变量

  • hash():获取hash值,一般用作键值

  • iter():传入可被迭代的数,和next()函数并用

  • next():取下一个值

    li = [11, 22, 33, 44, 55, 66]
    it = iter(li)
    item = next(it)
    print(item) # 11
    item = next(it)
    print(item) # 22
    
  • max():取最大值

  • min():取最小值

  • pow(2,3):2的3次方

  • reverse():反转

  • rount():四舍五入

  • sorted():排序

  • zip(iterable, iterable):

    li1 = [1, 2, 3, 4, 5, 6]
    li2 = ['a', 'b', 'c', 'd', 'e', 'f']
    ret = zip(li1, li2)
    for item in ret:
        print(item)
    # ===>
    (2, 'b')
    (3, 'c')
    (4, 'd')
    (5, 'e')
    (6, 'f')
    
  • --import--()

    r = __import__('random')
    a = r.random()
    print(a)
    
  • sorted:

    • 参数传入可得到的类型,且元素必须是同一种类型,然后会调用参数的sort方法
    • 返回排序后的变量
    li = [22, 33, 11, 77, 55, 99]
    new_li = sorted(li)
    print(new_li)
    li.sort()
    print(li)
    
  • 验证码

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

推荐阅读更多精彩内容