Python中的小魔法(二)
时间:2022-05-07
本文章向大家介绍Python中的小魔法(二),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
01
函数
局部变量
x = 66
def func(x):
print('x等于', x)
x = 6
print('局部变量x改变为', x)
func(x)
print('x一直是', x)
结果
x等于66
局部变量x改变为6
x一直是66
使用全局声明
x = 66
def func():
global x
print('x的值是', x)
x = 6
print('全局变量x改为', x)
func()
print('x的值是', x)
结果
x的值是66
全局变量to改为6
x的值是6
02
模块
字节编译的.pyc文件
导入一个模块是一个相对昂贵的事情,所以Python做了一些技巧使它更快。一种方法是创建扩展名为.pyc的字节编译文件,是Python将程序转换成的一种中间形式。
pyc是由py文件经过编译后二进制文件,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由Python的虚拟机来执行的。
注意:这些.pyc文件通常在与之相应的.py文件的同一个目录中创建。如果Python在那个目录中没有写入权限,那么.pyc文件将不会创建。
from ... import语句
常见的就是
from urllib import request
from bs4 import BeautifulSoup
from lxml import etree
一般来说,你应该避免使用这个语句,而应该使用import语句,因为你的程序将避免名称冲突,将更具可读性。
第一个模块
例子 (保存为 test.py):
def demo():
print('哈哈,这是我写的一个模块~')
__version__ = '3.1'
在该目录下新建文件
import test
test.demo()
print('版本',test.__version__)
结果
哈哈,这是我写的一个模块~
版本 3.1
Python充分重用相同的符号产生了独特的'Pythonic'的感觉,这样我们不需要不断学习新的方法来做事情。
也可以使用from ... import语法
from test import demo,__version__
demo()
print('版本',__version__)
dir函数
>>> import urllib
>>> dir(urllib) # 获得属性列表
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__',
'__path__', '__spec__', 'error', 'parse', 'request', 'response']
>>> dir() # 获得当前模块的属性列表
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'requests', 'urllib']
>>> a = 1
>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'requests', 'urllib']
>>> del a
>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'requests', 'urllib']
注意,dir()函数对任何对象都起作用。例如,运行dir('str')来学习str(string)类型的更多知识。
打包(Packages)
现在,你必须开始观察组织你的程序的层次结构。变量通常在函数内部。函数和全局变量通常在模块内部。如果你想组织模块?这就到了牵涉到打包的地方了。
包只是模块的文件夹,使用一个特殊的__init__.py文件,指示Python,这个文件夹是特殊的,因为它包含Python模块。
假设你想创建一个叫做'世界'的程序包,分装'亚洲'、'非洲'等等,分包按序包含'印度'、'马达加斯加'等等。
这是你的文件结构:
- <在sys.path中现有的一些文件夹>/
- world/
- __init__.py
- asia/
- __init__.py
- india/
- __init__.py
- foo.py
- africa/
- __init__.py
- madagascar/
- __init__.py
- bar.py
- TypeScript 1.6发布:完全支持React/JSX
- 【专知-Java Deeplearning4j深度学习教程04】使用CNN进行文本分类:图文+代码
- sql server之数据库语句优化
- 【专知-Java Deeplearning4j深度学习教程05】无监督特征提取神器—AutoEncoder:图文+代码
- 平衡树初阶——AVL平衡二叉查找树+三大平衡树(Treap + Splay + SBT)模板【超详解】
- HDU 2689 Sort it【树状数组】
- BZOJ 1800: [Ahoi2009]fly 飞行棋【思维题,n^4大暴力】
- Vijos P1066 弱弱的战壕【多解,线段树,暴力,树状数组】
- GeetTest~下一代验证(附C#案例)
- [接口测试 - http.client篇] 17 http.client之入门级接口测试框架
- 评论JS插件~多说+畅言
- jQuery HTML5 Uploader
- 1022: [SHOI2008]小约翰的游戏John【Nim博弈,新生必做的水题】
- [接口测试 - http.client篇] 16 基于http.client之POM实战一下
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python实现sm2和sm4国密(国家商用密码)算法
- 面试常考算法之区间问题
- 爬虫 | JS逆向某验滑动加密分析
- LeetCode | 28.实现strStr()
- Redis | Redis 哈希相关命令
- 如何访问SAP Spartacus里的config数据
- 工具系列 | HTTP API 身份验证和授权
- Providers in SAP Spartacus
- 详解ELF可执行文件格式:读取头部信息和程序表头
- 我用 Python 写了个基金涨跌通知助手
- 模仿腾讯新闻做了款新闻阅读小程序
- 使用关键点进行小目标检测
- 彻底搞懂 etcd 系列文章(八):etcd 事务 API
- 使用docker搭建一套开发环境全家桶
- TypeScript里的.d.ts语法