Python基础入门(2/3)

集合

  • 集合是由唯一元素组成的无续集。
  • 创建方式如下:

    >>> a = {1,2,}

    >>> type(a)

    <class 'set'>

    >>> a = set([1,2,3])

    >>> a

    {1, 2, 3}

    >>> type(a)

    <class 'set'>

    >>>

  • 集合的常用运算:

函数

运算符

说明

a.add(x)

-

为集合a添加元素x

a.remove(x)

-

删除元素

a.union(b)

a|b

返回并集

a.intersection(b)

a&b

交集

a.difference(b)

a-b

差集

a.symmetric_difference(b)

a^b

对称差集,(a|b)-(a&b)

a.issubset(b)

-

判断a是否是b的子集

a.issuperset(b)

-

判断a是否包含b

a.isdisjoint(b)

-

判断a与b交集是否为空

序列推导式

  • 可以非常简洁的构造一个新序列。

    #将列表中字符串的第一个字母大写得到新列表。(可以用map实现相同的功能)

    >>> names = ['xiaoming','liming']

    >>> [x[0].upper()+x[1:] for x in names]

    ['Xiaoming', 'Liming']

    >>> map(lambda x:x[0].upper()+x[1:],names)

    <map object at 0x0000015D0ECBAF60>

    >>> list(map(lambda x:x[0].upper()+x[1:],names))

    ['Xiaoming', 'Liming']

    >>>

  • 推导式中还可以加过滤条件

    #返回列表中长度大于3的字符串并大写

    >>> strs = ['abcd','abc','a']

    >>> [x.upper() for x in strs if len(x)>3]

    ['ABCD']

    >>>

嵌套序列推导式

  • 简化由列表组成的列表的遍历
  • 嵌套for循环中各个for顺序是怎样的,嵌套推导式中各个for表达式的顺序就是怎样的。

    >>> a = [['1','2'],['b','c']]

    >>> [x for lists in a for x in lists]

    ['1', '2', 'b', 'c']

    >>> [x for x in [lists for lists in a]]

    [['1', '2'], ['b', 'c']]

    >>> [[x for x in lists] for lists in a]

    [['1', '2'], ['b', 'c']]

    >>>

函数

  • 用关键字def声明,使用return关键字返回。
  • 函数可以有位置参数,关键字参数。关键字参数通常用于指定默认值或可选参数。
  • 函数参数的限制在于:关键字参数必须位于位置参数之后。
  • 函数可以通过返回元组,再进行拆包的方式实现返回多个值。
  • 函数亦为对象。
  • 匿名函数关键字lambda,没有提供名称属性。

闭包:返回函数的函数

  • 闭包就是由其他函数动态生成并返回的函数。
  • 闭包可以访问其创建者的局部命名空间的变量。
  • 虽然可以修改任何内部状态对象,但不能绑定(比如:a = 1)外层函数作用域中的变量。一个解决办法是修改字典或列表而不是绑定变量。
  • 这种模式其实也是用类来实现的。

代码:

def people(name):
    names = name#设置姓名
def say_age(years):#根据年份计算年龄
        print('{0}今年{1}岁'.format(names,years-1995))
    return say_age

s = people('小明')#设置名字
for i in range(2015,2017):
    print('年份:',i)
s(i)


输出:

年份: 2015

小明今年20岁

年份: 2016

小明今年21岁

>>>

拓展调用语法*args,**kwargs

  • * 用来传递任意个无名字参数,这些参数会一个Tuple的形式访问。
  • **用来处理传递任意个有名字的参数,这些参数用dict来访问。

代码:

def say_hello_then_call_f(f,*g,**kwargs):
    print('args is',g)
    print('kwargs is',kwargs)
    print('开始调用函数:%s'%f)
    return f(*g,**kwargs)

def g(x,y,z=1):
    return (x+y)/z

print(say_hello_then_call_f(g,1,1,z=23))


输出:

args is (1, 1)

kwargs is {'z': 23}

开始调用函数:<function g at 0x0000013A67B27F28>

0.08695652173913043

柯里化:部分参数应用

  • 柯里化指的是从现有函数中派生出新函数的技术。

代码:

def people_say_age(names,years):#根据年份计算年龄
        print('{0}今年{1}岁'.format(names,years-1995))
    
s = lambda years:people_say_age('小明',years)
for i in range(2015,2017):
    print('年份:',i)
s(i)


输出:

年份: 2015

小明今年20岁

年份: 2016

小明今年21岁

>>>

生成器

  • Python有统一的迭代器协议,能以一致的方式对序列进行迭代。
  • 迭代器是一种特殊对象,在诸如for循环之类的上下文中向python解释器输送对象。
  • 生成器(generator)是构造新的可迭代对象的一种简单方式。生成器以延迟的方式返回一个值序列,即每返回一个值后暂停,直到下一个值被请求时继续。通过关键字yield声明。

代码:

"""
    生成器:
      每次调用的时候print出是第d次调用
      返回次数的三次方
"""
def n_genrators():
    s = 1
    while s<5:
        print('n_genrators提示:第%d次调用'%s)
        yield s**3
        s +=1
        
#生成器的实例化
gen = n_genrators()

#返回生成器的类型名
print('gen类型名:{0}'.format(type(gen)))

#next方法取数
print("next取值=",next(gen))

#for循环取数
for x in gen:
    print('x = %d'%x)

#生成器已经close(),报错StopIteration
print("next取值=",next(gen))


输出:

gen类型名:<class 'generator'>
n_genrators提示:第1次调用
next取值= 1
n_genrators提示:第2次调用
x = 8
n_genrators提示:第3次调用
x = 27
n_genrators提示:第4次调用
x = 64
Traceback (most recent call last):
File "C:/Users/tinysoft/Desktop/ggg.py", line 27, in <module>
print("next取值=",next(gen))

StopIteration

生成器表达式

  • 生成器表达式是构造生成器的最简单方式。
  • 类似于列表字典的推导式,把列表推导式两边的方括号变为圆括号即可。

代码:

gen = (x**3 for x in range(5))

print("gen的类型名:%s"%type(gen))
for x in gen:
    print("x=%d"%x)


 输出:

gen的类型名:<class 'generator'>
x=0
x=1
x=8
x=27
x=64

>>>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值