如果大家想要系统的学习和研究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的数据类型一般分为:
- 集合数据类型,如list, tuple, dict, set, string
- 是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来创建匿名函数
特点:
- lambda只是一个表达式,函数体比def简单
- lambda是表达式,不是代码块,仅仅只能在lambda表达式中封装简单逻辑
- lambda函数有自己的命名空间,不能访问自由参数列表之外的或全局命名空间的参数
- 与C和C++内联函数不同
一个函数体内的变量与另一个函数体内变量 不同
sum = lambda num1, num2:num1 + num2
print(sum(1, 2))