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

如果大家想要系统的学习和研究python以及在其基础上的常见的机器学习和深度学习框架和工具包, 那么强烈推荐大家学习CSDN开设的:

人工智能工程师:https://edu.csdn.net/topic/ai30?utm_source=ljl

这个课程我实际听了, 老师的讲授水平很好, 条理清晰,思路明确,例子丰富, 非常值得大家学习借鉴, 在此强烈推荐一波, 让我们一起学习进步~

ps: 如果想要系统学习python的朋友,下面这门课是涵盖了python基础语法、web开发、数据挖掘以及机器学习,是CSDN强力推荐的课程,有需要的朋友可以看看哈:
Python全栈工程师:https://edu.csdn.net/topic/python115?utm_source=ljl

 

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

创建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))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hhjian6666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值