cpython

Python 中 3 个不可思议的返回

独自空忆成欢 提交于 2020-08-20 05:28:05
第一个: 神奇的字典键 some_dict = {} some_dict[5.5] = "Ruby" some_dict[5.0] = "JavaScript" some_dict[5] = "Python" 很多人学习python,不知道从何学起。 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多已经做案例的人,却不知道如何去学习更加高深的知识。 那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码! QQ群:1097524789 Output: >>> some_dict[5.5] "Ruby" >>> some_dict[5.0] "Python" >>> some_dict[5] "Python" "Python" 消除了 "JavaScript" 的存在? 说明: Python 字典通过检查键值是否相等和比较哈希值来确定两个键是否相同. 具有相同值的不可变对象在Python中始终具有相同的哈希值. 注意: 具有不同值的对象也可能具有相同的哈希值(哈希冲突). >>> 5 == 5.0 True >>> hash(5) == hash(5.0) True 当执行 some_dict[5] = "Python" 语句时, 因为Python将 5 和 5.0 识别为 some_dict 的同一个键, 所以已有值

Linux

回眸只為那壹抹淺笑 提交于 2020-08-19 16:49:09
如果你在CentOS8下面配置虚拟环境时,遇到如下错误: [root@localhost ~]# mkvirtualenv my_django usage: virtualenv [--version] [--with-traceback] [-v | -q] [--app-data APP_DATA] [--reset-app-data] [--discovery {builtin}] [-p py] [--creator {builtin,cpython3-posix,venv}] [--seeder {app-data,pip}] [--no-seed] [--activators comma_sep_list] [--clear] [--system-site-packages] [--symlinks | --copies] [--no-download | --download] [--extra-search-dir d [d ...]] [--pip version] [--setuptools version] [--wheel version] [--no-pip] [--no-setuptools] [--no-wheel] [--symlink-app-data] [--prompt prompt] [-h] dest virtualenv: error:

cpython gc 模块

浪尽此生 提交于 2020-08-18 20:36:11
参考 文档 文档 1.gc 相关文件位置 cpython/Include/object.h cpython/Modules/gcmodule.c cpython/Include/internal/pycore_pymem.h 2.CPython中的垃圾回收机制包含了两个部分 引用计数器机制 (大部分在 Include/object.h 中定义) 分代回收机制 (大部分在 Modules/gcmodule.c 中定义) 3.引用计数 创建对象时引用计数为1 被引用时,引用计数+1 变量不引用时,引用计数-1 引用计数为0时,释放对象 引用计数: 简单方便 无法解决: A<->B 互相引用 typedef struct _object { _PyObject_HEAD_EXTRA Py_ssize_t ob_refcnt; PyTypeObject *ob_type; } PyObject; /* cpython/Include/object.h */ static inline void _Py_DECREF(const char *filename, int lineno, PyObject *op) { _Py_DEC_REFTOTAL; if (--op->ob_refcnt != 0) { } else { /* // _Py_Dealloc 会找到对应类型的

学习Python

╄→尐↘猪︶ㄣ 提交于 2020-08-17 15:25:00
初次接触Python Python 解释器、安装解释器、从Print开始、编写执行代码工具 编译执行与解释执行 编译执行需要编译链接产生机器代码,再由CPU进行读取 Python不需要编译机器代码,用解释器(代码转换器转换成bytecode文件后由Python虚拟机pump执行)进行解释执行 CPU是两者的物质基础 Python 解释器种类 cpython-c Jpython-java IronPython-.net 不同操作平台(Linux、Windows、Unix、Mac OS等,x86-PC 笔记本、平板、手机、ARM平板、手机等)都能运行同样的Python 脚本(但有些平台相关性的代码不能跨平台) 从Print开始 输出字符串到控制台窗口/写代码文件 语句(statement):完成一个完整的语义的最小单元,可能是一行也可能是多行,程序的代码就是由语句组成。 print关键字:关键字是语言保留的表示特殊意义的标识字符串,不可以重新定义 Python 是大小写敏感的语言(区分大小写)Python代码在文件中必须:1、第一行语句顶到最左边,不能有空格;2、第一行语句前面可以有空行、不同语句行首要对齐。 交互式命令行执行:直接在命令窗口输入命令 代码编辑工具:IDLE/notepad++/pycharm 注:Python语言解释器由C++语言实现

Python 函数为什么会默认返回 None?

两盒软妹~` 提交于 2020-08-17 08:15:00
Python 有一项默认的做法,很多编程语言都没有——它的所有函数都会有一个返回值,不管你有没有写 return 语句。 本文出自“Python为什么”系列,在正式开始之前,我们就用之前讨论过的 pass语句 和 …对象 作为例子,看看 Python 的函数是怎样“无中生有”的: 可以看出,我们定义的两个函数都没有写任何的 return 语句,但是在函数调用后,都能取到一个返回值。 它们的执行效果跟直接写 return 语句相比,是完全相同的: 这 4 个例子属于两种类型:一种没有写 return,但是都有隐藏的 return 返回值;一种写了 return,而且实际也有返回值。 也就是说,后者在语义和行为上表现一致,前者虽然在语义上缺失,但是却有实际的行为和结果;后者的行为是显性的,前者却是隐性的。 《Python之禅》中有一句“显性胜于隐性(Explicit is better than implicit)”,但是,出于简洁和便利的考虑(Simple is better than complex),实际上 Python 中有很多行为都是隐性的,会把一些在语法层面的事交给解释器去完成。 上一期的 真值判断 是隐性的行为,本文前两个例子也是如此。 使用dis查看字节码,就可以看到其背后的小动作: 在这个对比图中,可以看出上述 4 个函数的解释器指令一模一样! 不管有没有写

【流畅的python】笔记(P1序幕)自测知识点和书籍补充

瘦欲@ 提交于 2020-08-14 16:21:22
文章目录 C1 py数据模型 1.1 一摞Python风格的纸牌 __getitem__用法 ps:namedtuple 1.2 如何使用特殊方法 自测 答案 1.2.2 字符串表示形式 自测 答案 1.3 特殊方法一览 自测 答案 1.4 为什么 len 不是普通方法 自测 答案 希望看完这本书写的代码好看~~ C1 py数据模型 py中下划线 1.1 一摞Python风格的纸牌 __getitem__用法 这里的__getitem__是对元素索引的封装, 和__len__是对len的封装。 调用方法,看代码即可,所以文字没有截图截完。 实现了gettitem可以进行迭代索引和切片,还可以用in来判断是否在其中。 ps:namedtuple 可以将namedtuple理解为c中的struct结构,其首先将各个item命名,然后对每个item赋予数据。用以构建只有少数属性但是没有方法的对象,比如数据库条目。 1.2 如何使用特殊方法 自测 1. 特殊方法可以直接用调用函数的方法调用吗? ** 2. Py 内置的类型底层实现是python原生语言还是cpython【】** 3. 为什么不建议代码中随意添加特殊方法? 答案 不可以,只能显示或者隐式的调用。也就是说没有 my_object. len () 这种写法,而应该使用 len(my_object) 。在执行len(my

pymssql读取varchar字段中文显示乱码的问题分析

橙三吉。 提交于 2020-08-13 19:52:56
问题   用python的pymssql模块读取旧业务系统后台SQL Server 2000数据库展示数据为乱码 开发环境 操作系统:windows 8 数据库 MS SQL Server 2000,默认配置 python 2.7.6 pymssql 2.1.1 开发工具:PyCharm 4.0 业务逻辑   数据库的[rooms]表记录一些功能房间列表,与其他接口数据进行对比,然后输出对比结果。    rooms表结构 : CREATE TABLE [rooms] ( [id] [int] IDENTITY (1, 1) NOT NULL , [name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL , PRIMARY KEY CLUSTERED ([id] ON [PRIMARY] , UNIQUE NONCLUSTERED ([des]) ON [PRIMARY] ) ON [PRIMARY] GO    模拟代码 # -*- coding: utf-8 -*- import pymssql rooms=None with pymssql.connect(host='192.168.1.100',database='builds', user='sa',password='password', # charset='utf8',

Python编程语言的核心是什么?

百般思念 提交于 2020-08-11 14:19:06
为什么问这个问题? 我们需要一个用于WebAssembly的Python实现,这已经不是什么秘密了。它不仅将Python引入到浏览器中,而且由于iOS和Android都支持将JavaScript作为应用的一部分运行,它也将Python引入到移动端。这一切都让我兴奋。 但是,当想到创建一个新的Python实现这一令人生畏的任务时,我的大脑也开始问这个问题:Python到底是什么?我们与CPython一起生活了这么长时间,我怀疑我们中的大多数人只是简单地认为“Python == CPython”。PyPy试图做到兼容,以便实现CPython的实现细节。基本上,我所知道的大多数Python实现都努力通过CPython的测试套件,并尽可能地与CPython兼容。 这是令人生畏的。由CPython实现的Python是非常动态的,并且暴露了许多只有在使用解释器实现Python时才有意义的东西。例如,PyPy有一个用于JIT的基线解释器,但是在Python中可以使用许多东西来强制PyPy关闭JIT并坚持使用字节码。仅靠REPL就可以使事情变得非常动态,因为解释器会立即对进入REPL的所有内容进行动态解析、编译和执行。 这让我开始思考Python到底是什么?这门语言的核心是什么?所有的Python实现需要涵盖什么样的基线,才能真正能够将自己称为人们仍能认出的Python实现?或者从我的角度来看

python中list的append, extend, +=, +区别

为君一笑 提交于 2020-08-10 19:58:12
文章作者:Tyan 博客: noahsnail.com | CSDN | 简书 0. 测试环境 Python 3.6.9, dis 库是Python自带的一个库,可以用来分析字节码,而字节码是CPython解释器的实现细节。 1. 引言 在Python中,扩展 list 的方法有多种, append , extend , += , + 都是列表扩展的方式,但它们的使用又有些许不同,需要根据具体情况来选择,本文主要分析它们的差异。 2. 对比与分析 2.1 list 的函数方法 list.append(x) append 方法会将 x 作为 list 的一项添加到末尾。等价于 a[len(a):] = [x] 。 list.extend(iterable) extend 方法会将后面的可迭代对象的所有项添加到列表中。 2.2 代码测试 Test Case 1 # Code a = [ 1 , 2 , 3 ] b = [ 4 , 5 , 6 ] a += b print ( a ) a = [ 1 , 2 , 3 ] b = [ 4 , 5 , 6 ] a . append ( b ) print ( a ) a = [ 1 , 2 , 3 ] b = [ 4 , 5 , 6 ] a . extend ( b ) print ( a ) a = [ 1 , 2 , 3 ] b = [

Python3 源码阅读-深入了解Python GIL

微笑、不失礼 提交于 2020-08-09 18:46:03
今日得到: 三人行,必有我师焉,择其善者而从之,其不善者而改之。 现在已经是2020年了,而在2010年的时候,大佬 David Beazley 就做了讲座讲解Python GIL的设计相关问题,10年间相信也在不断改善和优化,但是并没有将GIL从CPython中移除,可想而知,GIL已经深入CPython,难以移除。就目前来看,工作中常用的还是协程,多线程来处理高并发的I/O密集型任务。CPU密集型的大型计算可以用其他语言来实现。 1. GIL In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (However, since the GIL exists, other features have grown to depend on the guarantees that it enforces.) ----- Global Interpreter Lock