社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

表哥在阿里任职工程师,曾经学Python的学习笔记,知识梳理必备!

python • 6 年前 • 664 次点击  

极简教程


数据类型

我们可以使用 type() 函数类获取对象的类型,Python3中内置数据类型包括: None,int,float,complex,str,list,dict,tuple,set,frozenset,range 等,Python2中还有 long 类型,Python中并没有内置数组类型。


dict,list,set 这些是可变类型(用户自定义类型也可变),可以改变类型对象的值;数值和字符串类型则是不可变的。

  • str

  • 与js一样,python中字符串即可用单引号也可用双引号表示


  • numbers

  • Python3中数值类型有: int 和 float 两种

  • list

  • 字面量表示:[1,1.0,False,'list']

  • 列表推导式 ,创建列表的一种简易方法:



  • tuple

  • 字面量表示:(1,1.0,False,'tuple')

  • range

list、tuple、range均属于 序列类型(Sequence Types)

  • dict



  • set/frozenset

  • 集合是不包含重复元素的数据集,frozenset是不可变的,set是可变的,可以使用字面量构建一个集合 {1,2,2,4,5} 会输出 {1,2,4,5}



类型转换

Python中 类型转换 只需调用相关函数即可

函数

# 函数定义模板
def func_name([self,][args]):
pass
def say_hello():
print('hello python!')
# python3.5之后,定义函数时可以添加类型说明
# 这里只是提供一个说明文档而非强制类型约束
def type_instruction(num:int)->int:
return num

定义 多返回值 函数

# 多返回值函数,返回一个tuple对象
def multi_returns():
return 0,1

内置函数

Python中有许多 内置函数 :

  • dir

  • 我们可以使用 dir() 函数来查看对象都含有哪些成员:



  • map



  • filter



  • reduce 不是内置函数,但也很有用



lambda

Python中使用 lambda 关键字即可创建lambda表达式:


*args 与 **kvargs

*args 和 **kvargs 都用于函数中接收多个参数,这里 args 和 kvargs 只是约定俗成的写法,可以换成其它的名称,但 * 和 ** 则是必须的。

*args 和 **kvargs 的区别是, *args 用于接受普通参数, **kvargs 用于接受键值对参数。


三元运算符


面向对象

Python中一切皆对象(这句话理解起来并不是那么容易),包括函数(C#,JAVA中函数不能独立存在)。这里贴一篇以前写的文章: Python中的类、对象、继承

Python按引用传递对象,对于不可变对象在修改时会产生新的对象;而对于可变对象,所有的修改都会反映在原有对象上。

魔术方法 是Python 对象模型 的重要部分。

可以动态的给对象/类型添加属性,若给类型添加属性,则该属性在已产生的实例上也是可见的:


异常与错误

Python中异常与错误类间关系如下:


自定义异常只需继承 Exception 或各种 Error 类即可

异常处理

try:
raise IOError('使用raise语句抛出异常')
except IOError as err:
print(err)
else:
print('未发生异常则执行')
finally:
pass

捕获多个异常类型:

try:
raise IOError()
except (IOError,TypeError):
pass

with语句

with...as... 语句等价于 try...finally... ,与C#中的 using 语句类似

命名规范

module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_VAR_NAME, instance_var_name, function_parameter_name, local_var_name.

应该避免的名称

  1. 单字符名称, 除了计数器和迭代器.

  2. 包/模块名中的连字符(-)

  3. 双下划线开头并结尾的名称(Python保留, 例如init)

命名约定

  1. 所谓”内部(Internal)”表示仅模块内可用, 或者, 在类内是保护或私有的.

  2. 用单下划线(_)开头表示模块变量或函数是protected的(使用import * from时不会包含).

  3. 用双下划线(__)开头的实例变量或方法表示类内私有.

  4. 将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块.

  5. 对类名使用大写字母开头的单词(如CapWords, 即Pascal风格), 但是模块名应该用小写加下划线的方式(如lower_with_under.py). 尽管已经有很多现存的模块使用类似于CapWords.py这样的命名, 但现在已经不鼓励这样做, 因为如果模块名碰巧和类名一致, 这会让人困扰.


Python之父Guido推荐的规范


包与模块

  • 模块

  • 包含Python语句或定义的文件就是一个模块,文件名就是模块名。在一个模块中,模块名是全局变量 __name__ 的值。

  • 包含 __init__.py 文件的文件夹即可视为一个包,包用于管理模块,可以防止模块命名冲突。如: A.C 和 B.C ,分别表示A包中的C模块和B包中的C模块。

  • 导入模块 :

  • import a 、 import a as alias 、 from a import * 、 from a import b,c

  • Python解释器会先从内置模块中寻找导入的模块,然后从 sys.path 中指定的 模块搜索路径寻找模块

测试

编写一个文件操作类,文件名为 file_operator.py :

# coding=utf-8
import codecs
class FileOperator:
def save_file(self, file_path, content, encoding="utf-8"):
with codecs.open(file_path, "w", encoding) as f:
f.write(content)

编写测试用例,文件名为 test_file_operator.py :

# coding=utf-8
import unittest
class TestFileOperator(unittest.TestCase):
def test_save_file(self):
content = "file content 文本内容"
opt = file.FileOperator()
opt.save_file("1.txt", content)
if __name__ == "__main__":
unittest.main()

工具推荐

  • iPython

  • VS Code

  • PyCharm

小结

以上是自己近期学习Python的一些总结,全文的主要关注点在Python语言本身。掌握以上内容后,便可以用Python写些脚本,辅以其他第三方包或框架就可以干更多更复杂的事了。如,爬虫、数据分析、后端开发以及现在比较热的人工智能(其实,我是不建议追热点的)。

用了一段时间的Python后,会觉着Python挺有意思的。

最后附上一张,个人总结的语言学习套路:



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/XGkMibzzki
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/26482
 
664 次点击