• Python Import This源码剖析

    写作不易,资瓷一下呗!本文首发于个人博客:https://raycoder.me

    众所周知,Python有一个import this的彩蛋:

    ...

    29-07-20
  • Python学习笔记之内存分配与id函数、is关键字

    写作不易,资瓷一下呗!本文首发于个人博客:https://raycoder.me

    内存分配

    在Python学习中,我们经常会写这样的代码。

    >>> foo = [1, 2, 3]
    >>> bar = foo
    

    这里,我们把foo的值赋给了bar——但是,这真的是一种赋值而不是..别名..吗?

    ...

    17-04-20
  • Python中的with关键字使用方法?

    写作不易,资瓷一下呗!个人博客:https://raycoder.me 本文首发于Ray's Blog Python中有一种操作叫做打开文件,代码如下: >>> f = open('/foo/bar.txt', 'r') >>> data = f.read() >>> f.close() >>> data 'Hello World!' 这样,你就从/foo/bar.txt这个文本文件中读取到了它的文本:Hello World! 但是,这样处理有一些问题: 可能在处理完文本后忘记关闭文件? 可能在读取时出现错误? 这时,try...except...finally...语句就派上了用场: try: f = open('/foo/bar.txt', 'r') except: print('Fail to open /foo/bar.txt') exit(-1) finally: f.close() 虽然这段代码运行良好,但是太冗长了。 这时...

    01-04-20
  • Python中的yield关键字分析:一个Generator

    写作不易,资瓷一下呗!个人博客:https://raycoder.me 本文首发于Ray's Blog 我们先来康一段代码: >>> def count(n): for i in range(1, n+1): print(i) >>> count(5) 1 2 3 4 5 这一小段代码执行了计数,输出了1-5。 不过,有时我们会有一些想♂FA,想要每次获取下一个数,如第一次执行时给你返回1,第二次返回2,第三次返回3……如此如此。 你可能会这么做: >>> n = 0 >>> def addone(): global n n+=1 print(n) >>> addone() 1 >>> n 1 但这样又暴露了一个缺点:我们使用了一个全局变量。想要避免这种缺点又要实现计数的功能,yield就派上用场了。 想要实现G...

    27-03-20
  • Python中的字符串转义字符

    今天不知道吃啥,就吃老八秘制小汉堡康Ray的Python字符串特殊字符解析~~ 转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS),将当前位置移到前一列 008 \f 换页(FF),将当前位置移到下页开头 012 \n 换行(LF),将当前位置移到下一行开头1 010 \r 回车(CR),将当前位置移到本行开头1 013 \t 水平制表(HT) (跳到下一个TAB位置) 009 \v 垂直制表(VT) 011 \\ 代表一个反斜线字符"\" 092 \' 代表一个单引号(撇号)字符 039 \" 代表一个双引号字符 034 ? 代表一个...

    24-03-20
  • Python学习笔记之assert关键字简析

    什么是assert?它的中文名叫做断言。我们先来看一个简单的例子: age = int(input()) if age>=18: print('You can watch it!') else: print('You are too young!') 这个例子进行了一下18G操作,没有达到18岁的人会被拒之门外友善的提示。 不过,我们可以通过assert关键字来实现同等的操作。 >>> age = int(input()) 17 >>> assert age >= 18 Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> assert age >= 18 AssertionError age = int(input()) try: assert age >= 18 print('You can watch it!') except AssertionError: print('You are too young!') 这只是一个简单的例子,assert还可以进行更复杂的操作。 引用一段菜鸟教程。 assert的语法格式如下: assert expression 等价于: if not expression: raise AssertionError assert后面也可以紧跟参数: assert expression...

    18-03-20
  • Hugo-Python(伪)自动部署

    最近无聊就写了个Hugo自动部署的Python脚本。

    ...

    16-03-20
  • Python学习笔记之exec()函数简析

    exec()函数的作用:动态执行python代码。也就是说exec()可以执行复杂的python代码,而不像eval()函数那样只能计算一个表达式的值。 【转】https://www.jianshu.com/p/3cf0a649e7bc 举一个简单的小例子,代码如下: >>> i = 12 >>> j = 13 >>> exec("answer=i*j") >>> print("Answer is %s"%answer) Answer is 156 这表明第三句的exec()函数能够正确地执行Python代码,并且能将计算结果赋予answer变量,就像真正的Python代码一样。 那么,我们能不能让exec()函数执行一...

    06-03-20
  • Python学习笔记之eval()函数简析

    一个最基本的eval()函数的格式应该如下: >>> command = 'print(\'Hello world!\')' >>> eval(command) Hello world! 没错,eval函数是一个可以让字符串转换为表达式的内置函数(注意eval()不支持任何形式的赋值操作,而不能是复杂的代码逻辑)。 eval()函数不仅可以执行代码,还可以作如下操作: >>> eval('[1, 2, 3]') #字符串转列表 [1, 2, 3] >>> eval('(1, 2, 3)') #字符串转元组 (1, 2, 3) >>> eval('{"one": 1, "two": 2, "three": 3}') #字符串转字典 {'one': 1, 'two': 2, 'three': 3} >>> eval('0o187') 0o187 eval()函数的完整格式如下: eval(expression[, globals[, locals]]) expression: 表达式。 globals: 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。 locals: 变量作用域,局...

    05-03-20
  • 从零开始写一个音乐爬虫-4:QQ音乐

    划了这么多天水,我终于回来了…… 毕竟博主也是要上课的,QwQ。 最近终于抽出一些时间了,研究研究QQ音乐的爬虫。 我们随便打开一个歌单(https://y.qq.com/n/yqq/playlist/6809716883.html),登录自己的QQ: ?QQ音乐竟然还对网页端做限制!根据我多年的前(摸)端(爬)开(滚)发(打)经验,这种网站一定是通过JS做限制,并且在浏览器的Network中一定会有相关的数据。 我们先打开一个音乐链接(https://y.qq.com/n/...

    05-03-20
  • 从零开始写一个音乐爬虫-2:下载音乐文件

    上一篇文章我写了爬取网易云音乐歌单中音乐ID及下载链接的教程,这一期我们就应该把文件下载下来了。 下载文件,我们通过Python3的urllib模块可以很轻松地实现。 新建一个download.py文件。 下载音乐主要的代码: #!/usr/bin/env python #-*- coding:utf8 -*- ''' @Author : Ray @Contact : ray@raycoder.me @Software: PyCharm @File : download.py @Time : 2019/11/4 21:19 ''' import urllib, time, os def downloadMusic(music_dictionary, path): #下载音乐 exist = os.path.exists(path) if not exist: os.makedirs(path) complete = [] failed = [] for i in music_dictionary: try: print(u'正在下载:' + i) trans = str.maketrans('\\/*?:"|<>', ' ') urllib.request.urlretrieve(music_dictionary[i], path + i.translate(trans) + '.mp3') print(u'下载完成!') complete.append(i) time.sleep(1) except OSError as e: print(u&#...

    25-02-20
  • 从零开始写一个音乐爬虫-1-网易云音乐:批量获取歌单音乐下载链接

    本文将会详细的写从零开始制作网易云音乐爬虫的过程,可以下载网易云音乐音乐付费歌曲,使用Python3开发。 声明:本文从前端入手,再获得歌曲数据。如果您不想走那么多弯路,请参考这篇文章:https://zhuanlan.zhihu.com/p/30246788和这篇文章:https://www.shangyexinzhi.com/article/details/id-297404 本文采用环境: Pycharm + Python 3.7.5 所需模块: fake-useragent requests re 安装方法: pip install beautifulsoup4 fake-useragent requests 爬虫思路: graph TD; 初始化程序--获取...

    22-02-20
  • 从零开始写一个音乐爬虫-3:酷狗音乐

    本文将会详细的写从零开始制作酷狗音乐爬虫的过程,可以下载酷狗音乐音乐付费歌曲,使用Python3开发。 随便打开一个歌单,右键检查属性发现这个<a>标签中含有data。 点进去播放,会发现: 看来,音乐外链和这个hash哈希值是脱不了关系的了。 事实上,酷狗音乐歌曲数据外链如下: http://www.kugou.com/yy/index.php?r=play/getdata&hash=<刚才看到的哈希值> 填入刚刚看到的值(URL:https:...

    18-02-20