设为首页 收藏本站
查看: 786|回复: 0

[经验分享] 【Python系统学习】基础篇

[复制链接]

尚未签到

发表于 2015-12-1 09:18:55 | 显示全部楼层 |阅读模式
  这次真的是最后一次了!第三次滚Python的基础。走了太多弯路。认真一点!菜鸟!
  
  教程


  •   转义字符 \

  可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\


  •   用'''...'''的格式表示多行内容

  •   用全部大写的变量名表示常量(编写习惯)

  •   ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节。

  •   在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。




  • >>> '%2d-%02d' % (3, 1)
    ' 3-01'


  •   用%%来表示一个%

  •   字符串用%s,数字用%d


列表:list []


  •   Python内置的一种数据类型是列表。

  •   list是一种有序的集合,可以随时添加和删除其中的元素。

  •   list中索引值为[-1], 是最后一个元素

  •   list是一个可变的有序表,所以可以增-(append)插-(insert)删-(pop)改-(直接赋值)

  •   list里面的元素的数据类型可以不同

  •   list元素也可以是另一个list或tuple //利用多维数组去取元素,tuple不可更改


元组:tuple ()


  •   另一种有序列表

  •   tuple和list非常类似,但是tuple一旦初始化就不能修改

  •   只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号

  •   tuple元素也可以是另一个tuple或list //这个时候这个元素就可以满足list的修改等方法了


条件判断和循环


  •   条件判断




if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>

  •   循环有两种:1.for...in循环 2.while循环

  •   Python提供一个range()函数,可以生成一个整数序列 //range(5)生成的序列是从0开始小于5的整数

  •   while循环,只要条件满足,就不断循环,条件不满足时退出循环


raw_input


  •   raw_input()读取的内容永远以字符串的形式返回,把字符串和整数比较就不会得到期待的结果,必须先用int()把字符串转换为我们想要的整型


dict


  •   Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度

  •   一个key只能对应一个value

  •   字典还有个get方法

  •   一般都是通过Key去找到对应的value,操作不可逆

  •   要删除一个key,用pop(key)方法,对应的value也会从dict中删除

  •   dict的key必须是不可变对象

  *这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)

Set


  •   set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

  •   add(key)和remove(key)方法

  •   set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集(&)、并集(|)等操作


函数
  Python内置函数


  •   可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”

  •   默认参数必须指向不变对象 (不要用list等可变的作为默认参数)

  •   可变参数(*args) //可定义一个列表或元祖num,再通过*num传入到函数中

  •   关键字参数(**kw) //字典形式

  •   参数组合 (*args和**kw)可以混合着用

  '''
  Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。
  默认参数一定要用不可变对象,如果是可变对象,运行会有逻辑错误!
  要注意定义可变参数和关键字参数的语法:
  *args是可变参数,args接收的是一个tuple;
  **kw是关键字参数,kw接收的是一个dict。
  以及调用函数时如何传入可变参数和关键字参数的语法:
  可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3));
  关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})。
  使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。
  '''


  •   递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出


切片


  •   L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3

  •   倒数第一个元素的索引是-1

  •   前10个数,每两个取一个,取得是索引号靠前的数 // L[:10:2]

  •   只写[:]就可以原样复制一个list

  *tuple也可以进行切片操作,不过取出来的是一个tuple

迭代


  •   如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)

  •   在Python中,迭代是通过for ... in来完成的

  •   通过collections模块的Iterable类型判断一个对象是否为可迭代对象

  •   Python内置的enumerate函数可以把一个list变成索引-元素对


列表生成式:range


  •   列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式

  •   写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来

  •   for循环后面还可以加上if判断(再筛选一次)

  •   for循环其实可以同时使用两个甚至多个变量

  *先写for循环,然后再写要生成的元素(放在前面),最后加[] //最后加()这就变成了一个生成器
  *变小写的方法是lower()
  *内建的isinstance函数可以判断一个变量是不是字符串

生成器


  •   在Python中,这种一边循环一边计算的机制,称为生成器(Generator)

  •   生成生成器(Generator)的方法:1.把列表生成式的[]改成() 2.用yield

  •   如果要一个一个打印出来,可以通过generator的next()方法 //不推荐,可直接用for..in循环取元素


函数式编程
  *函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。

高阶函数:接收函数作为参数


  •   变量可以指向函数

  •   不要把封装好的函数的函数名用来只想对象(如:abs=10)

  •   一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数

  •   编写高阶函数,就是让函数的参数能够接收别的函数


map/reduce


  •   map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回

  •   reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:


reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
  *求和运算可以直接用Python内建函数sum()

filter


  •   Python内建的filter()函数用于过滤序列

  •   filter()也接收一个函数和一个序列

  •   根据函数的规则,每个元素去比较匹配,符合的存到[],不符合的过滤掉

  *python内建的strip函数:去掉字符串前后的空格

sorted


  •   Python内置的sorted()函数就可以对list进行排序

  •   sorted()函数也是一个高阶函数 //sorted([序列],函数名)


返回函数


  •   高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回


闭包


  •   外部函数+内部函数 //注意缩进

  •   返回的函数并没有立刻执行,而是直到调用了内部函数名()才执行

  •   实现难,调用简单

  •   返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量


匿名函数


  •   关键字lambda表示匿名函数,冒号前面的x表示函数参数

  •   匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果

  •   匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该(匿名)函数

  *函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数

装饰器(Decorator)


  •   函数对象有一个__name__属性,可以拿到函数的名字

  •   在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)

  •   函数A前用@调用出定义的装饰器,装饰器也是高阶函数,接收的函数是A


偏函数


  •   通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点

  •   创建偏函数时,实际上可以接收函数对象、*args和**kw这3个参数

  •   当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单


模块
  python自带的内建函数

面向对象编程


  •   类名通常是大写开头的单词

  •   由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法,在创建实例的时候,就把name,score等属性绑上去 //初始化

  •   如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问

  • 在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name__、__score__这样的变量名

继承和多态


  •   在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)

  •   多态其实指的主要就是子类可以重写父类的方法,然后再实例化调用的时候根据数据类型(指定的是哪个类的)来选择调用具体的方法(父类or子类)

  *类一定要实例化,才能去调用类方法啊!

获取对象信息


  •   使用type()来判断对象类型

  •   有一种类型就叫TypeType,所有类型本身的类型就是TypeType

  •   使用isinstance()函数判断class的类型 //从上往下的 判断子类的实例化是否为父类的数据类型(真),判断父类的实例化是否为子类的数据类型(假)

  •   使用dir()函数获得一个对象的所有属性和方法

  •   getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态


使用__slots__
  *一般我们把方法写在class中,所有实例都可以去掉用它
  为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class能添加的属性
  *使用__slots__要注意,__slots__定义的属性仅对当前类起作用,对继承的子类是不起作用的
  **除非在子类中也定义__slots__,这样,子类允许定义的属性就是自身的__slots__加上父类的__slots__

使用@property(后期继续学习下,不是很理解)
  *场景是设置分数(set_score),打印分数(get_score),这样子设置两个方法,实例调用的时候也是调用这两个方法,挺麻烦的。
  Python内置的@property装饰器就是负责把一个方法变成属性调用的
  *@property 可以将python定义的函数“当做”属性访问

多重继承


  •   通过多重继承,一个子类就可以同时获得多个父类的所有功能

  *Mixin:需要“混入”额外的功能,通过多重继承就可以实现,这是一种设计模式
  **Mixin的目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个Mixin的功能,而不是设计多层次的复杂的继承关系
  由于Python允许使用多重继承,因此,Mixin就是一种常见的设计

定制类(Python自带的几个) 参考
  *看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的


  •   __str__()返回用户看到的字符串,而__repr__()返回程序开发者看到的字符串,也就是说,__repr__()是为调试服务的

  •   如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法

  *如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法,该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的next()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环


  •   Python还有另一个机制,那就是写一个__getattr__()方法,动态返回一个属性 //只有在没有找到属性的情况下,才调用__getattr__

  •   任何类,只需要定义一个__call__()方法,就可以直接对实例进行调用

  •   通过callable()函数,我们就可以判断一个对象是否是“可调用”对象

  *__XX__类的方法都不用去调用,这像__init__一样,属于内置方法啦
  **迭代器 基础知识
  一个实现了 __iter__() 和 next() 方法的类可以作为迭代器使用

元类(先跳过吧,到时候学Django的时候再拿出来学习下)
  '''
  Python内置了一套异常处理机制,来帮助我们进行错误处理。
  我们也需要跟踪程序的执行,查看变量的值是否正确,这个过程称为调试。
  '''

错误处理(Python常见的错误类型)


  •   在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见

  •   try...except...finally...的错误处理机制

  *当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块,执行完except后,如果有finally语句块,则执行finally语句块,至此,执行完毕
  **finally一定会被执行(可以没有finally语句)


  •   Python的错误其实也是class,所有的错误类型都继承自BaseException,所以在使用except时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽

  •   Python内置的logging模块可以非常容易地记录错误信息

  • 通过配置,logging还可以把错误记录到日志文件里,方便事后排查

抛出错误(raise)


  •   Python内置的错误类型(类),我们也可以自己定义自己的错误类型(类)//不过一般内置的都够用,用继承的方式重写自己的错误类型(类)就行

  •   怎么使用自己定义的错误类型(类)呢:用raise //有点类似try..except..finally,只不过我们用的是raise关键字

  •   捕获错误目的只是记录一下,便于后续追踪。但是,由于当前函数不知道应该怎么处理该错误,所以,最恰当的方式是继续往上抛,让顶层调用者去处理

  *raise语句如果不带参数,就会把当前错误原样抛出 //我们捕获错误,只不过是判断是不是这种错误类型,然后执行后面我们设置的语句(不一定是处理错误,除非是logging),所以我们在这儿的最后写一句raise,这样子系统会处理这个错误,打出错误信息的、
  **捕获错误的目的是分析错误!!!

调试
  1.简单直接粗暴有效,就是用print把可能有问题的变量打印出来看看
  2.断言
  3.(推荐)logging //logging.info()就可以输出一段文本 //logging具体的到时候再说
  4.pdb //这个要去单独启动的
  5.pdb.set_trace() //也是挺麻烦的
  6.IDE //有console

单元测试(unittest) //先略过了

文档测试 //略过
  Python内置的“文档测试”(doctest)模块可以直接提取注释中的代码并执行测试

文件读写


  •   读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的

  •   读文件:open -> read -> close;

  •   Python引入了with语句来自动帮我们调用close()方法 //with ... as ...

  • 调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list
  •   要读取二进制文件,比如图片、视频等等,用'rb'模式打开文件即可

  • 写文件:open -> write -> close

操作文件和目录


  •   操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中,这一点要注意一下

  • 查看路径、新建目录、删除目录、文件重命名、删掉文件
  •   把两个路径合成一个时,不要直接拼字符串,而要通过os.path.join()函数;同样的道理,要拆分路径时,也不要直接去拆字符串,而要通过os.path.split()函数

  • os.path.splitext()可以直接让你得到文件扩展名 // B/a.txt -> ('B/a','.txt')
  •   利用Python的特性过滤文件


序列化


  •   我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling;反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling

  •   Python提供两个模块来实现序列化:cPickle和pickle

  •   pickle.dumps()方法把任意对象序列化成一个str,然后,就可以把这个str写入文件。或者用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object

  • 用pickle.load()方法从一个file-like Object中直接反序列化出对象
  *和JSON一样都可以写到一个可读写文件中,再反序列搞到内存中打印读取
  **反序列化得到的所有字符串对象默认都是unicode而不是str

JSON //JSON的具体知识后面有空再补补
  如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便
  Python内置的json模块提供了非常完善的Python对象到JSON格式的转换

进程和线程 //略过
  一个进程 -> 多个线程
  多任务的实现有3种方式:多进程模式;多线程模式;多进程+多线程模式;

多进程


  •   Python的os模块封装了常见的系统调用,其中就包括fork,可以在Python程序中轻松创建子进程 //Windows没有fork调用

  •   multiprocessing模块提供了一个Process类来代表一个进程对象

  在Unix/Linux下,可以使用fork()调用实现多进程。
  要实现跨平台的多进程,可以使用multiprocessing模块。
  进程间通信是通过Queue、Pipes等实现的。

正则表达式


  •   用\d可以匹配一个数字,\w可以匹配一个字母或数字

  •   .可以匹配任意字符

  •   用*表示任意个字符(包括0个)

  •   用+表示至少一个字符

  •   用?表示0个或1个字符

  •   用{n}表示n个字符,用{n,m}表示n-m个字符

  •   \s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格

  •   要做更精确地匹配,可以用[]表示范围

  •   [0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;[0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串

  •   ^表示行的开头,^\d表示必须以数字开头

  •   $表示行的结束,\d$表示必须以数字结束


re模块
  Python提供re模块,包含所有正则表达式的功能
  *使用Python的r前缀,就不用考虑转义的问题 :s = r'ABC\-001' # Python的字符串
  match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None //re.match('xxxx')

切分字符串 split

分组
  用()表示的就是要提取的分组(Group)
  如果正则表达式中定义了组,就可以在Match对象上用group()方法提取出子串来;group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串

常用内建模块

collections //tmd不知道为什么导入了不能用,先放着吧!!
  collections是Python内建的一个集合模块,提供了许多有用的集合类

namedtuple


  •   namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素


deque


  •   deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈

  •   deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素


base64 //不懂什么鬼,感觉也用不到,略过了


  •   Base64是一种用64个字符来表示任意二进制数据的方法;Base64是一种最常见的二进制编码方法

  • Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据

struct //官方说明文档


  •   由于str既是字符串,又可以表示字节,所以,字节数组=str

  •   Python提供了一个struct模块来解决str和其他二进制数据类型的转换

  *讲解一下吧:图片视频在python输出来的都是二进制符号,我们无法判断具体是啥,通过struct给它转一转转成我们看得懂的输出

hashlib //有些不太理解,略


  •   Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等 //摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)

  •   摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过

  •   MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示

  •   另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似


itertools
  Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数

XML //SAX还不会,用了虫师的DOM方法
  操作XML有两种方法:DOM和SAX
  DOM会把整个XML读入内存,解析为树,因此占用内存大,解析慢,优点是可以任意遍历树的节点;SAX是流模式,边读边解析,占用内存小,解析快,缺点是我们需要自己处理事件
  *正常情况下,优先考虑SAX,因为DOM实在太占内存
  **在Python中使用SAX解析XML非常简洁,通常我们关心的事件是start_element,end_element和char_data,准备好这3个函数,然后就可以解析xml了
  会产生3个事件:


  •   start_element事件,在读取<a href="/">时;

  •   char_data事件,在读取python时;

  •   end_element事件,在读取</a>时。


HTMLParser //现在不都用urllib了吗?果断略!
  Python提供了HTMLParser来非常方便地解析HTML

PIL //处理图像;可用于图片的验证码处理;
  PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。

图形界面 //略略

Tkinter
  Python自带的库是支持Tk的Tkinter,使用Tkinter //调用它的接口就行了

网络编程 //略

电子邮件 //导入email又不行,哎,先略过

SMTP发送邮件
  SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件
  Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件

访问数据库 //略

SQLite,MySQL
  *表是数据库中存放关系数据的集合,一个数据库里面通常都包含多个表;表和表之间通过外键关联;

Web开发

WSGI接口(Web Server Gateway Interface)
  一个Web应用的本质就是:


  •   浏览器发送一个HTTP请求;

  •   服务器收到请求,生成一个HTML文档;

  •   服务器把HTML文档作为HTTP响应的Body发送给浏览器;

  •   浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示。

  *最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。Apache、Nginx、Lighttpd等这些常见的静态服务器就是干这件事情的
  **有了MVC,我们就分离了Python代码和HTML代码。HTML代码全部放到模板里,写起来更有效率。
  除了Flask,常见的Python Web框架还有:


  •   Django:全能型Web框架;

  •   web.py:一个小巧的Web框架;

  •   Bottle:和Flask类似的Web框架;

  •   Tornado:Facebook的开源异步Web框架。


协程 //略过
  协程,又称微线程,纤程。英文名Coroutine。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145702-1-1.html 上篇帖子: 第一章 语言处理与python 下篇帖子: Emacs 配置 Python 编程环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表