Python学习,常用常记(集合 函数,类型转换,可迭代对象,迭代器,函数参数分类,匿名函数lambda)

版权声明:转载请附上此博客地址,谢谢 https://blog.csdn.net/qq_30796379/article/details/87966109

集合:无序无重复元素的集合;

创建set 需要一个list,tuple或者dict作为输入集合;

s1 = set([1, 2, 3, 4, 5, 1, 2]),得到的是{},做去重;

如果是用dict作为输入集合,则只拿出dict中的key;

del list1;del tuple1;del dict1;

s1.add(x):向集合中添加一个元素x,可添加重复元素,无效果;

列表,字典 为 可变,不可以向集合中添加;可添加元组;

s1.update:向集合中插入打碎的list,tuple,dict,string;

s1.remove(x):从集合中删除元素x,不能用下标删除,因为集合无序(无下标);

可用for循环进行遍历,依然是无序的,可enumerate;

s1 & s2:集合的交集;

s1 | s2:集合的并集;

#去重
list1 = [1, 2, 3, 3, 4, 4, 5, 5, 5]
set1 = set(list1)
list1 = list(set1)

list1 = [1, 2, 3, 3, 4, 4, 5, 5, 5]
list1 = list(set(list1))

可迭代对象:可以直接作用于for循环的对象统称为可迭代对象(Iterable);

可以用isinstance()去判断一个对象时否是Iterable对象;

可以作用于for的数据类型一般分为:

  1. 集合数据类型,如list, tuple, dict, set, string
  2. 是generate,包括生成器和带yield的generate function
#可迭代对象
from collections import Iterable
isinstance([], Iterable)#True
isinstance((), Iterable)#True
isinstance({}, Iterable)#True
isinstance("", Iterable)#True
isinstance((x for x in range(10)), Iterable)#True
isinstance(1, Iterable)#False

迭代器:不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,知道最后抛出一个StopIteration错误,表示无法继续返回下一个值;

可以被next()函数调用并不断返回下一个值的对象成为迭代器(Iterator对象);

#迭代器
from collections import Iterator
isinstance([], Iterator)#False
isinstance((), Iterator)#False
isinstance({}, Iterator)#False
isinstance("", Iterator)#False
isinstance((x for x in range(10)), Iterator)#True

l = (x for x in range(5))#返回一个迭代器
print(next(l))#0
print(next(l))#1
print(next(l))#2
print(next(l))#3
print(next(l))#4
#list, tuple, dict, string可转化为Iterator
from collections import Iterator
x = iter([1, 2, 3])
print(next(x))

isinstance(iter([]), Iterator)#True
isinstance(iter(()), Iterator)#True
isinstance(iter({}), Iterator)#True
isinstance(iter(""), Iterator)#True
#输入end才结束输入,而非回车
endStr = "end"
str = ""

for line in iter(input, endStr):
    str += line + "\n"

print(str)
#程序开发过程中很少用input,测试用print
#函数(求两数的最大公约数)
def gcd(a, b):#形参
    return (a if(b==0) else gcd(b, a%b))
gcdx = gcd(4, 6)#实参

引用传递:传递的是可变类型,list,dict,set;

def func(lis1):
    lis1[0] = 100

list1 = [0, 1, 2, 3]
func(list1)
print(list1)#[100, 1, 2, 3]

值传递:传递的是不可变类型,tuple,string,number;

def func(num):
    print(id(num))#地址为8791547172160
    num = 10
    print(id(num))#地址为8791547172480

x = 20
print(id(x))#地址为8791547172160
func(x)#不可变类型,值传递
print(x)#20

#引用常量区的值
a = 10
b = 10
print(id(a), id(b))#两个变量,地址相同
#关键字参数
def func(key, str):
    print(key, str)
func(str = "we still have a long way to go", key = 99)

#默认参数,最好将默认参数放到最后
def func(str, key = 98):
    print(str, key)
func("we still have a long way to go")

#不定长参数,加了星号(*)的变量存放所有未命名的变量参数,如果在函数调用时没有指定参数,它就是一个空元祖
def func(name, *arr):#*args
    print(name)
    print(type(arr))#tuple
    for x in arr:
        print(x)
func("Sinhaeng_Hhjian", "we", "still", "have", "a", "long", "way", "to", "go")

#**代表键-值对的参数字典,和*所代表的的意义类似
def func(**kwargs):
    print(kwargs)
    print(type(kwargs))
func(x=1, y=2, z=3)

匿名函数,不使用def这样的语句定义函数,使用lambda来创建匿名函数

特点:

  1. lambda只是一个表达式,函数体比def简单
  2. lambda是表达式,不是代码块,仅仅只能在lambda表达式中封装简单逻辑
  3. lambda函数有自己的命名空间,不能访问自由参数列表之外的或全局命名空间的参数
  4. 与C和C++内联函数不同

一个函数体内的变量与另一个函数体内变量 不同

sum = lambda num1, num2:num1 + num2
print(sum(1, 2))

猜你喜欢

转载自blog.csdn.net/qq_30796379/article/details/87966109