看完这篇文章我知道至少85%的人是没有入门Python的!花两周整理

以前刚学编程的时候就对Python略有耳闻,不过学校只有C,C++,Java,C#。和PHP有句"PHP是最好的语言" 这种家喻户晓的骚话一样,Python也有"人生苦短,我用Python"。而接触Python这个词最多的场合就是在一些技术群里,有些大佬张嘴动不动就说什么Py交易,作为潜伏在群里的开发萌新的我每次都会忍不住会发出这样的感慨:大家遇到啥问题都会在里面交流!而且免费分享零基础入门料资料web开发 爬虫资料一整套!是个非常好的学习交流地方!也有程序员大神给大家热心解答各种问题!很快满员了。欲进从速哦!各种PDF等你来下载!全部都是免费的哦!只为帮助大家快速入门,所以小编在群里等你们过来一起交流学习呢!

于心不忍,决定写个py脚本来拯救他,脑子里也有了程序的大概逻辑:

1.让后台导出一份mysql建表语句,安装mysql把表建起来;

2.Python连mysql,读取表里的数据

3.编写带limit去重的sql查询语句,查询得到所有分类

4.得到的所有分类就是要创建的文件夹,迭代批量创建文件夹;

5.sql查询歌曲下载url与分类,拼接,写入到文件中;

6.读取文件,迭代:下载url截取文件名与分类路径拼接成文件

的完整路径,调用下载相关函数下载url到对应路径即可。

3.开发环境搭建Python下载安装官网下载:https://www.python.org/downloads/,自己选择需要的版本与操作系统。

Windows

傻瓜式下一步就好,记得勾选Add Python x.x to Path!勾选了你装完就不用自己去配置环境变量,安装完毕后打开CMD输入:python3 -V 能查看到安装的Python版本说明安装成功,如果提示错误:python3不是内部或外部命令之类的话,恭喜你可以百度下:Python3环境变量配置 了~

Mac

Ubuntu:一般内置,执行下述命令可查看版本,如果想安装自己喜欢

的版本可以键入:sudo apt-get install python版本号进行安装

2) 关键字与标识符命名规则

在对变量或者方法名这些标识符进行命名的时候,需要注意,不能够

与Python中的关键字相同,通过keyword.kwlist可以查询所有的关键字:

需要import keyword模块哦~

input():

从键盘读入一个字符串,并自动忽略换行符,所有形式的输入按字符串处理。

可以在括号里写一些输入的提示信息,比如: input("请输入一个字符串:")

输出结果:

6) dir函数

查看对象内所有属性与方法,只需要把要查询的对象添加到括号中即可,

比如定义一个类,然后用dir可以获取所有的属性与方法:

部分输出结果:

输出结果:

另外Python中,以下这两种赋值写法是正确的:

数字类型转换:(Python文档中,方括号[]括起来表示为可选)函数作用int(x[,base])将x转换为一个整数,第二个参数是指定前面字符串的进制类型float(x)将x转换到一个浮点数complex(real [,imag])创建一个复数str(x)将对象x转换为字符串repr(x)将对象x转换为表达式字符串eval(str)用来计算在字符串中的有效Python表达式,并返回一个对象tuple(s)将序列s转换为一个元组list(s)将序列s转换为一个列表chr(x)将一个整数转换为一个字符unichr(x)将一个整数转换为Unicode字符ord(x)将一个字符转换为它的整数值hex(x)将一个整数转换为一个十六进制字符串oct(x)将一个整数转换为一个八进制字符串bin(x)将一个整数转换为一个二进制字符串数学函数:函数作用abs(x)返回数字的绝对值,如abs(-10) 返回 10ceil(x)返回数字的上入整数,如math.ceil(4.1) 返回 5cmp(x, y)如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1exp(x)返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045fabs(x)返回数字的绝对值,如math.fabs(-10) 返回10.0floor(x)返回数字的下舍整数,如math.floor(4.9)返回 4log(x)如math.log(math.e)返回1.0,math.log(100,10)返回2.0log10(x)返回以10为基数的x的对数,如math.log10(100)返回 2.0max(x1, x2,...)返回给定参数的最大值,参数可以为序列。min(x1, x2,...)返回给定参数的最小值,参数可以为序列。modf(x)返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。pow(x, y)x的y次方round(x [,n])返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。sqrt(x)返回数字x的平方根,数字可以为负数,返回类型为实数,如math.sqrt(4)返回 2+0j

5) 元组(tuple)受限的列表,元组中的元素不能修改,使用小括号()表示。有一点要注意的是:当元组中只有一个元素,需要在元素后添加逗号,否则会当做括号运算符使用!元组可以当做不能修改的参数传递给函数,而且元组所占用的内存较小。使用的话,除了没有修改元组元素的方法外,其他的和列表的方法基本一致。另外元组中的元素不能删除,但是可以使用del语句来删除整个元组,不过比较少用,因为Python回收机制会在这个元组不再被使用时自动删除(和Java的gc有点像~) 还可以使用tuple(list)将字符串或列表转换为元组。

输出结果:

6) 字典(dict)和列表,元组通过下标序列来索引元素不同,字典使用键值对的形式来存储数据,通过键来索引值,创建字典时,键不能重复,重复后面的会覆盖!因为键必须不可变,所以键可用数字,字符串或元组,但是不能用列表!使用冒号:分割键与值,多个键值对用逗号,分隔;字典也是支持嵌套的!用法示例如下:

7) 集合(set)集合中的存储的元素无序且不重复,所以你无法去索引某个具体的元素;使用大括号{}包裹元素,逗号分隔,如果有重复的元素会被自动剔除!另外有一点要注意的是,如果是创建空集合必须使用set(),而不能用{},通过上面我们也知道了{}的话是直接创建一个空字典!用法示例如下:

各种内置方法:方法名作用capitalize()把字符串的第一个字符改为大写casefold()把整个字符串的所有字符改为小写center(width)将字符串居中,并使用空格填充至长度width的新字符串count(sub[,start[,end]])返同sub在字符申里边出现的次数,start和end参数表示范围,可选encode(encoding= 'utf-8 ',errors='strict')以encoding指定的编码格式对字符串进行编码endswith(sub[,start[,end]])检查字符串是否以sub 子字符串结束,如果是返回True,否则返回False。start和end参数表示范围,可选expandtabs([tabsize= 8])把字符串中的tab符号()转换为空格,如不指定参数,默认的空格数是tabsize=8find(sub[,start[,end]])检测sub是否包含在字符串中,如果有则返回索引值,否则返回-1,start和end参数表示范围,可选index(sub[,start[,end]])跟find方法一样,不过如果sub不在string中会产生一个异常isalnum()如果字符串中至少有一个字符,并且所有字符都是字母或数字则返回True,否则返回Falseisalpha()如果字符串至少有一个字符串,并且所有字符都是字母则返回True,否则返回Falseisdecimal()如果字符串只包含十进制数字则返回True,否则返回Falseisdigit()如果字符串只包含数字则返回True,否则返回Falseislower()如果字符串中至少包含一个区分大小写的字符,并且这些字符都是小写,则返回True,否则返回Falseisnumeric()如果字符串中只包含数字字符,则返回True,否则返回Falseisspace()如果字符串中只包含空格,则返回True,否则返回Falseistitle()如果字符串是标题化(所有单词大写开头,其余小写),则返回True,否则返回Falseisupper()如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回True,否则返回Falsejoin(sub)以字符串作为分隔符,插入到sub中所有的字符之间,使用+去拼接大量字符串的时候是很低效率的,因为加号拼接会引起内存赋值一级垃圾回收操作,此时用join来拼接效率会高一些,比如: ''.join(['Hello','Python'])ljust(width)返回一个左对齐的字符串,并使用空格填充至长度为width的新字符串lower()转换字符串所有大写字符为小写lstrip()去除字符串左边的所有空格partition(sub)找到子字符串sub,把字符串分割成3元组(前,pre,后)如果字符串中不包含则返回('原字符串','','')replace(old, new[,count])把字符串中的old子字符串替换成new,如果count指定,则替换次数不超过count次rfind(sub[,start[,end]])和find()方法类似,不过是从右开始查找rindex(sub[,start[,end]])和index()方法类似,不过是从右开始查找rjust(width)返回一个右对齐的字符串,并使用空格填充至长度为width的新字符串rpartition(sub)类似于partition(),不过是从右边开始查找rstrip()删除字符串末尾的空格split(sep=None,maxsplit=-1)不带参数默认是以空格为分隔符切片字符串,如果maxspli参数t右设置,则仅分隔maxsplit个子字符串,返回切片后的子字符串拼接的列表splitlines([keepends])按照' '分隔,返回一个包含各行作为元素的列表,如果keepends参数指定,则返回前keepends行startswith(prefix[,start[,end]])检查字符串是否以prefix开头,是则返回True,否则返回False。start和end参数可以指定范围检查,可选strip([chars])删除字符串前边和后边所有的空格,chars参数可定制删除的字符串,可选swapcase()反转字符串中的大小写title()返回标题化(所有的单词都是以大写开始,其余字母小写)的字符串translate(table)按照table的规则(可由str.maketrans('a','b')定制)转换字符串中的字符upper()转换字符串中所有的小写字符为大写zfill(width)返回长度为width的字符串,原字符串右对齐,前边用0填充

输出结果:

另外,如果条件成立,你又不想做任何事情,可以直接使用

3) for循环

和C或者Java那种for循环不同,并不能直接写 for(int a = 0;a < 100;a++)

使用示例如下:

输出结果:

输出结果:

7.函数

对于一些重复使用的代码块,我们可以把他抽取出来写成一个函数。

5) 可变参数

有时传入的函数参数数目可能是不固定的,比如,要你计算一组值的和,具体有多少个数字不知道,此时就可以用可变参数了。只需要在参数前加上*号(其实是把数据打包成了元组),就代表这个参数是可变参数;如果有多个参数,写在可变参数后的参数要用关键字参数指定,否则会加入可变参数的范畴!!!有打包自然有解包,如果想把列表或元组当做可变参数传入,需要在传入的时候在实参前加上*号!另外,如果想把参数打包成元组的方式的话,可以使用两个星号(**)修饰~

8) 闭包

Python中的闭包:如果在一个外部函数中,对外部作用域(非全局)的变量

进行引用,那么内部函数就被认为是闭包。简单的例子如下:

输出结果:

输出结果: 400

8.异常处理

1) 语法错误与运行异常区分

语法错误是连编译器那关都过不了的错误,比如if后漏掉:冒号,跑都跑不起来;

运行异常则是程序跑起来后,因为程序的业务逻辑问题引起的程序崩溃,比如除以0;

2) Python中的常见异常异常描述信息AssertionError断言语句失败AttributeError尝试访问未知的对象属性IndexError索引超出序列的范围keyError字典中查找一个不存在的KeyNameError尝试访问一个不存在的变量OSError操作系统产生的异常,比如FileNotFoundErrorSyntaxErrorPython语法错误TypeError不同类型间的无效操作ZeroDivisionError除数为0IOError输入输出错误ValueError函数传参类型错误

作为初学者,暂时了解前两个参数就够了:file参数:文件名,不带路径的话会在当前文件夹中查找;mode:打开模式,有以下几种打开方式:模式作用r只读模式打开,默认w写模式打开,若文件存在,先删除,然后重新创建a追加模式打开,追加到文件末尾,seek()指向其他地方也没用,文件不存在,自动创建b二进制模式打开t文本模式打开,默认+可读写模式,可配合其他模式使用,比如r+,w+x如果文件已存在,用此模式打开会引发异常U通用换行符支持2) 文件对象的方法函数作用close()关闭文件,关闭后文件不能再进行读写操作read(size=-1)从文件读取指定的字节数,如果未设置或为负数,读取所有next()返回文件下一行readline()读取整行,包括换行符' 'seek(offset, from)设置当前文件指针的位置,从from(0文件起始位置,1当前位置,2文件末尾)偏移offset个字节tell()返回文件的当前位置write(str)将字符串写入文件writelines(seq)写入一个序列字符串列表,如果要换行,需要自己加入每行的换行符

4) OS模块中关于文件/目录的常用函数需要导入os模块,使用的时候需加上模块引用,比如os.getcwd()函数作用getcwd()返回当前工作目录chdir(path)改变当前工作目录listdir(path='.')不写参数默认列举当前目录下所有文件和文件夹,'.'当前目录,'..'上一层目录mkdir(path)创建文件夹,若存在会抛出FileExistsError异常mkdirs(path)可用于创建多层目录remove(path)删除指定文件rmdir(path)删除目录removedirs(path)删除多层目录rename(old,new)重命名文件或文件夹system(command)调用系统提供的小工具,比如计算器walk(top)遍历top参数指定路径下所有子目录,返回一个三元组(路径,[包含目录],[包含文件])curdir当前目录(.)pardir上一节目录(..)sep路径分隔符,Win下是'',Linux下是'/'linesep当前平台使用的行终止符,win下是' ',Linux下是' 'name当前使用的操作系统os.path模块(文件路径相关)函数作用dirname(path)获得路径名basename(path)获得文件名join(path1[,path2[,...]])将路径名与文件名拼接成一个完整路径split(path)分割路径与文件名,返回元组(f_path, f_name),如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或目录是否存在splitext(path)分隔文件名与扩展名getsize(file)获得文件大小,单位是字节getatime(file)获得文件最近访问时间,返回的是浮点型秒数getctime(file)获得文件的创建时间,返回的是浮点型秒数getmtime(file)获得文件的修改时间,返回的是浮点型秒数exists(path)判断路径(文件或目录)是否存在isabs(path)判断是否为决定路径isdir(path)判断是否存在且是一个目录isfile(path)判断是否存在且是一个文件islink(path)判断是否存在且是一个符号链接ismount(path)判断是否存在且是一个挂载点samefile(path1,path2)判断两个路径是否指向同一个文件wenji

3) 继承规则如下:

1.继承写法:class 子类(父类):

2.子类可以继承父类的所有属性与方法;

3.子类定义与父类同名的属性与方法会自动覆盖;

4.重写时如果想调用父类的同名方法可以使用super()函数.方法名调用;

Python支持多继承,多个父类用逗号隔开,子类可同时继承多个父类的属性与方法多继承的时候如果父类们中有相同的方法,调用的顺序是谁在前面先调用那个父类中的方法,比如有class Person(Name, Sex,Age),三个父类里都有一个show的方法,那么子类调用的是Name里的show()!如果不是得用多继承不可的话,应该尽量避免使用它,有时会出现一些不可遇见的BUG。还有一种叫组合的套路,就是在把需要用到的类丢到组合类中实例化,然后使用,比如把Book,Phone,Wallet放到Bag里:

输出结果:

4) 与对象相关的一些内置函数函数作用issubclass(class, classinfo)如果第一个参数是第二个参数的子类,返回True,否则返回Falseisinstance(object, classinfo)如果第一个参数是第二个参数的实例对象,返回True,否则返回Falsehasattr(object, name)测试一个对象中是否有指定的属性,属性名要用引号括着!getattr(object, name, [,default])返回对象的指定属性值,不存在返回default值,没设会报ArttributeError异常setattr(object, name, value)设置对象中指定属性的值,属性不存在会新建并赋值delattr(object, name)删除对象中的指定属性的值,不存在会报报ArttributeError异常property(fget,fset,fdel,doc)返回一个可以设置属性的属性

谢谢阅读,此篇都是非常基础的知识点!希望你能好好应用他!

本文来自企鹅号 - Python热爱着媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java成神之路

PHP中 对象自动调用的方法:__set()、__get()、__tostring()

 (1)__get($property_name):获取私有属性$name值时,此对象会自动调用该方法,将属性name值传给参数$property_name,通...

1034
来自专栏java一日一条

Java字符串之性能优化

在程序中你可能时常会需要将别的类型转化成String,有时候可能是一些基础类型的值。在拼接字符串的时候,如果你有两个或者多个基础类型的值需要放到前面,你需要显式...

862
来自专栏java一日一条

基础类型转化成String

在程序中你可能时常会需要将别的类型转化成String,有时候可能是一些基础类型的值。在拼接字符串的时候,如果你有两个或者多个基础类型的值需要放到前面,你需要显式...

852
来自专栏向治洪

Promise机制详解

Javascript 采用回调函数(callback)来处理异步编程。从同步编程到异步回调编程有一个适应的过程,但是如果出现多层回调嵌套,也就是我们常说的厄运的...

3077
来自专栏向治洪

Promise机制

Javascript 采用回调函数(callback)来处理异步编程。从同步编程到异步回调编程有一个适应的过程,但是如果出现多层回调嵌套,也就是我们常说的厄运的...

21410
来自专栏Jerry的SAP技术分享

使用javap深入理解Java整型常量和整型变量的区别

下面我们就用javap将.class文件反编译出来然后深入研究Java里整型变量和整型常量的区别。

1403
来自专栏专注数据中心高性能网络技术研发

[Effective Modern C++(11&14)]Chapter 2: auto

auto自动类型推导可以精简代码,避免隐式转换带来开销,同时增强程序可移植性和减少重构复杂性;但也由于与隐式代理类的冲突,造成了一些潜在问题,但是这些问题不是a...

3507
来自专栏用户2442861的专栏

Java中Synchronized的用法

原文:http://blog.csdn.net/luoweifu/article/details/46613015 作者:luoweifu 转载请标名...

651
来自专栏全沾开发(huā)

一个有味道的函数

一个有味道的函数 最近想到了一个自认为很有意思的面试题 如何实现一个compose函数。 函数接收数个参数,参数均为Function...

36812
来自专栏小灰灰

Shell学习笔记

1. 变量 声明变量 以 a-zA-Z 开头,不包含特殊字符 等号两边没有空格 不与保留字符重名 PATH="/user/yihui" 使用 变量前加 $ 符号...

19210

扫码关注云+社区

领取腾讯云代金券