python基础

#1.list列表的坑:
def append_list(x,lis=list()):
    lis.append(x)
    return lis
l1=append_list(1)
l2=append_list('a')
l3=append_list('23',[])
l4=append_list(23)
print(l3)
print(l4)

#输出结果:
# [1]
# ['a', '23', 23]
#分析:l2,l4 在进行调用的时候因为没有指定lis的参数,没有创建新的list列表,会默认使用lis=[]的基础上进行append 操作,所以l4=[1, 'a', 23];
# 而l3传入了lis参数,相当于创建了一个新的列表

# ******************************
print("*"*20+" 2 "+"*"*20)
#2Python闭包的延迟绑定的坑
def multi_test():

    return  [lambda x : i * x for i in  range(8)]
print([multi(2) for multi in multi_test()])

#输出结果为:
# [14, 14, 14, 14, 14, 14, 14, 14]
#分析:猜想输出的结果应该是[0,2,4,6,8,10,12,14],而结果是由于python闭包的延迟邦定造成,
# 在调用multi_test的函数时,参数的值在返回for循环完成后的值7, 所以最终的值被赋予了7

# ******************************
print("*"*20+" 2.1 "+"*"*20)
#2.1解决case2 的问题
def multi_bibao():
    return [ lambda x, i=i: i*x for i in range(8)]
print([mu(2) for mu in multi_bibao()] )
#输出结果为:
# [0, 2, 4, 6, 8, 10, 12, 14]

# ******************************
print("*"*20+" 2.2 "+"*"*20)
#2.2使用生成器 yield 解决case2
def multi_yield():
    for i in range(8):
        yield lambda x :i*x

print([mu(2) for mu in multi_yield()] )
#输出结果为:
# [0, 2, 4, 6, 8, 10, 12, 14]

# ******************************
print("*"*20+" 2.3 "+"*"*20)
#2.3使用偏函数 解决case2
from  functools import partial
from  operator import  mul
def mul_():
    return [partial (mul,l)  for l in range  (8)]
print([mu(2) for mu in mul_()] )
#输出结果为:
# [0, 2, 4, 6, 8, 10, 12, 14]

#分析:functools.partial(func, *args, **keywords),起到冻结函数的作用
# 函数装饰器,返回一个新的partial对象。
# 调用partial对象和调用被修饰的函数func相同,只不过调用partial对象时传入的参数个数通常要少于调用func时传入的参数个数。
# 当一个函数func可以接收很多参数,而某一次使用只需要更改其中的一部分参数,其他的参数都保持不变时,partial对象就可以将这些不变的对象冻结起来,
# 这样调用partial对象时传入未冻结的参数,partial对象调用func时连同已经被冻结的参数一同传给func函数,从而可以简化调用过程。
#########
#介绍operator函数:operator是使用c语言写的所以在执行算法的时候比python效率高一些,
'''
__all__ = ['abs', 'add', 'and_', 'attrgetter', 'concat', 'contains', 'countOf',
           'delitem', 'eq', 'floordiv', 'ge', 'getitem', 'gt', 'iadd', 'iand',
           'iconcat', 'ifloordiv', 'ilshift', 'imatmul', 'imod', 'imul',
           'index', 'indexOf', 'inv', 'invert', 'ior', 'ipow', 'irshift',
           'is_', 'is_not', 'isub', 'itemgetter', 'itruediv', 'ixor', 'le',
           'length_hint', 'lshift', 'lt', 'matmul', 'methodcaller', 'mod',
           'mul', 'ne', 'neg', 'not_', 'or_', 'pos', 'pow', 'rshift',
           'setitem', 'sub', 'truediv', 'truth', 'xor']
'''
'''
lt  <小于
le  <=小于等于
eq  ==
ne !=
ge >=
not_ not 否定

control +B 查看源码即可,一共464行代码,很简单的

'''

from  operator import  *
#1比较函数<   <=    ==  !=   >=  >
print(lt(3,4))
# True
print(le(2, 4))
# True
print(eq(2,2))
# True
print(ne(2,3))
# True
print(ge(4,3))
# True
print(gt(8,5))
# True

#2逻辑函数 非 真 是  不是
print(not_(3))
# False
print(truth(3))
# True
print(is_not(3,5))
#True
print(is_(1,1))
#True
print(is_not(1,2))
# True

#3数学函数: 绝对值  加法 &  取整//  index  inv取反   lshift左位移  mod取模(余数) mul乘法 neg返回(-obj)  (or |)   pos返回(+obj)
#pow 次方 rshift 右位移 sub减法  truediv除法 xor按位异或
print(abs(-3))
#3
print(add(3,4))
#7
print(and_(2,3))
# 2
print(floordiv(7,3))
#2
print(index(3))
# 3
print(inv(4))
#-5
print(lshift(2,3))
#16
print(mod(7,2))
#1
print(mul(3,4))
#12
# print(matmul(2.3,2.9))
print(neg(2))
#-2
print(or_(2,3))
#3
print(pos(-2))
#-2
print(pow(2,5))
#32
print(rshift(2,1))
#1
print(sub(5,2))
#3
print(truediv(12,3))
#4.0
print(xor(2,4))
print("+"*20)
#序列;concat判断是否可迭代 可迭代相加  ;contains(a,b) 判断b 是否在a中 ; countOf(a,b) 检查b在a中出现的次数
#delitem([1,2],1) 指定下标删除列表元素  ;getitem([1,2],1)取下标为1的元素 ;indexOf(a,2); seitem(a,index,newitem) 修改函数;
#length_hint(可迭代对象,index) 如果是可迭代,返回对应下标的value;否则返回下标的数值;
print(concat('hello ','word'))
# hello word
print(contains("qwe",'w'))
# True
print(countOf('qwerqq','q'))
#3
a=[1,2,3,4,5]
delitem(a,2)
print(a)
# [1, 2, 4, 5]
print(getitem(a,2))
# 4
print(indexOf(a,2))
# 1
setitem(a,1,7)
print(a)
#[1, 7, 4, 5]
print(length_hint(a,2))
#4
print(length_hint('',0))
#0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值