Python 3: 深度研究 (第 1 部分)

变量、函数和函数式编程、闭包 ( Closures )、装饰器 ( Decorators )、模块和套件

课程介绍:English 繁中

从这 44.5 小时的课程,你会学到

  • 深入了解变量( variables )、内存( memory )、命名空间( namespaces )和范筹( scopes )
  • 深入研究 Python 的内存管理和优化
  • 深入理解和使用 Python 的数值数据类型(布尔、整数、浮点数、小数点、分数、复数)
  • 高级布尔( Boolean )表达式和运算符
  • 可调用函数的高端用法,包括函数、 lambdas 和闭包( closures )
  • 函数式编程技术,如 map 、 reduce、filter 和 partials
  • 创建高端的装饰器,包括参数化装饰器、类( class )装饰器和装饰器类( classes )
  • 高端装饰器应用程 式,如记忆( memorization )和单一派遣通用函数(single dispatch generic functions )
  • 使用和理解 Python 的复杂模块和套件系统( package system )
  • 惯用 Python 和最佳实践
  • 理解 Python 的编译时间和运行时间,以及它如何影响你的代码
  • 避免常见的陷阱

要求

  • Python 编程的基本知识(变量、条件语句、循环、函数、列表、元组、字典、类)。
  • 你需要 Python 3.6 或更高版本,以及选择的开发环境(命令行、PyCharm、Jupyter等)

课程说明

如果你在看这门课程,你已经对 Python 感兴趣了,而且我不会跟你推销。

你已经知道,这种流行的语言对于解决 REST api 开发、系统脚本编写、数值分析、操纵数据、数据分析以及机器学习和人工智能等各种任务非常有用。

但是你想学习惯用的 Python 吗?

你想了解为什么某些事情 Python 对其有所帮助吗?

你想学习 Python的最佳实践,以及 Python 开发人员可能遇到的常见问题吗?

你想成为一名精通 Python 的程序员,成为正式的专家吗?

与其给你一个 5 分钟的解释如何做 Python ,只给你表面的了解,让你有可能采用不好的做法踩到陷阱,我会带你深入地理解各种概念的原理和原理。

我不仅会向你展示编程常见模式的各种方式,还会向你展示 Pythonic 方法做这相同操作。

这不是关于学习的 XYZ 数据库,或关注重要的 Python 语言特性。本课程着重于 Python 语言提供大量功能标准的程序库( library ) ,在你运用第三方程序库前应该了解的内容。

在这里,你将开始学习如何成为一名专业的 Python 开发人员。如果需要的话,可以深入探索的最佳资源。

我们详细讨论各种主题。

例如,数字:下一次,你必须在应用程序中使用实数,才能真正理解为什么浮点数( floats )按照他们的方式行事,以及是否应该使用小数或分数(并知道如何运行)。

你知道为什么你绝不使用浮点数( floats )的等号测试(==)吗?
0.1 + 0.1 + 0.1 == 0.3 – >错!

你知道为什么 float 0.1 实际看起来像:0.100000000000000005551115123126
而 0.125 则完全保存为 0.125000000000000000000000000000?

你了解整数除法和 mod(%)运算符吗? 若是负数? 你想了解他们为什么这样做,并避免代码中的潜在错误?

例如:

2%3 - > 2
-2%3 - > 1
2%-3 - > -1

10 // 3 - > 3
-10 // 3 - > -4
-10 // -3 - > 4

你真的明白布尔运算符是如何计算的吗?
你知道这段代码的作用:

a = True
b = False

x = a or b
x --> True

好。 这个怎么样?

a = None
b = 'python'

x = a or b
x --> 'python'

你想知道为什么吗?

你知道 Python 的相关真值( associated truth values, 真)吗? 如何利用它来编写更干净、更 Pythonic 的代码?

有关 comprehensions 你觉得如何? 你愿意学习写这样的程序:

def sum_cubes(lst):
sum = 0
for i in range(len(lst)):
sum = sum + lst[i] ** 3
return sum

或者这样:

def sum_cubes(lst):
return sum(e ** 3 for e in lst)

或者将一个字符串转换为索引( index )和字符( characters )的元组( tuples)列表?

非 Pythonic 的方式来做到这一点:

lst = []
for i in len(lst(s)):
lst.append((i, s[i]))
or the Pythonic way:
lst = list(enumerate(s))

10次中有9次,你可能甚至不需要那里的清单!

你想知道如何充分利用超灵活的方式来指定 Python 的函数参数吗?

你懂这吗?

def my_func(a,b = 10,* args,key1,key2 = None,** kwargs)

你想学习如何打包和解压参数吗? 一般来说可迭代?

你知道这是什么吗?

a, b, *_, x, y = some_list

或是这个?

x, y = y, x
x, y, z = y, z, x

你想知道为什么使用可变类型( mutable type )作为函数参数的默认值是危险的吗? 还是函数调用( function call )? 但也要了解你可以在哪里运用以获得优势?

你能在这个 “logging” 功能中发现问题吗?

def log(msg, event_time = datetime.utcnow()):
print(f'{event_time}: {msg}')
log('message 1')
# 5 minutes later...
log('message 2')

为什么这两种情况下时间都一样?

你知道如何让自定义类别(custom classes )支持排序运算符(如<,<=,>,> =,==和!=)吗? 你是否想知道如何编写自己的装饰器( decorator )以将此功能添加到你的类( classes )中,而无需指定所有可能的排序运算符? 或者考虑使用 Python 提供的标准程序库( library )? 若使用装饰器来加速某些函数调用,采用称为 memoization 的技术,你觉得怎样?

你想了解更多关于 map、reduce 和 filter 功能吗? 如何能全面理解但尽量少用? 或者如何处理偏函数( partial functions )和 lambda 等值? 运算符模块( operator module )?

说到 lambda? “标准”函数和 lambda 表达式之间的区别是什么?

def say_hello(name):
return f'Hello {name}!'

vs

say_hello = lambda name: f'Hello {name}!'

提示:他们是同一件事! 顺便说一句,Lambdas 不是闭包( closures )。

你认为一切都需要成为一堂课吗? 特别是如果你有 Java 或 C# 等语言的背景? 欢迎来了解Python 的一流功能和装饰器( decorators )!

说到装饰器( decorators ),你知道如何建一个装饰器吗?

你现在可以扩展它来创建也能接受参数的装饰器吗?
你了解装饰类( decorating classes )? 或用装饰类来装饰功能( decorating functions )?

你知道 @wraps 装饰器是做什么的吗? 你想知道它是如何达成其功用?
当你下一次遇到装饰器时,你会明白它们是如何运作的 – 其实没什么神奇之处,一旦你了解了闭包( closures )是什么、它们是如何运作的,以及如何利用它们,并了解一个事实 Python 是一种动态语言。

单一派遣通用功能?它们是什么? 我们如何自己创建它们? 标准程序库中有什么?

你认为元组( tuples )只是只读列表( read-only list )吗? 你确定一个元组永远不会随着时间而改变吗? 再次猜猜 – 我们将学习不变性( immutability )的真正意义以及变量如何映射( map )到记忆中的对象。

如何使用元组( tuples )来回馈多个值。 或者更好的是,使用已命名元组( named tuples )。 并为你的已命名元组指定默认值。

你知道模块( module )和套件( package )之间的区别吗?命名空间套件 ( namespace packages )?

你知道你可以直接从 zip 文件( archives )中保存和运行你的 Python 应用吗?

你是否了解输入( imports ) 可以做什么,如何能够使用输入( imports )控制套件的可见部分?你知道各种类型的输入(from … import …import …, 等)之间的区别吗?

在本系列的第 1 部分中,我们侧重于变量、内存参照( memory references )、内存管理( memory management ),以及函数式编程( functional programming )。包含的主题如数值数据类型、布尔和比较运算符、一级函数、lambda 表达式、闭包、装饰器、内省( introspection )、作为数据结构的元组( tuples ),以及所有关于命名空间( namespaces )、模块( modules )和套件( packages )的知识。

随着时间的推移,本课程也会不断增加内容,因为我一直在常见问题、陷阱和惯用 Python 中添加有用的视频教学(请参阅附加内容部分)。如果你有特殊要求,请告诉我!

在本系列即将发布的其他课程,我们将深入探讨异常、可迭代( iterables )和迭代器( iterators )、生成器( generators )、hash maps ( dictionaries 和集合)、面向对象的概念、异步编程和元编程( meta programming )等主题。

所有这些都在标准 Python 和标准程序库的情境中。

每个主题通常被分为讲座和实作程序时段。 Jupyter 笔记本被完全注释并可用于每个写程序的影片,也可通过 GitHub 保存库取得。

目标受众

  • 任何对 Python 有基本了解的人,希望技术能更上一层楼并深入理解 Python 语言及其数据结构。
  • 任何准备参加深入的 Python 技术面试的人。

讲师简介

Fred Baptiste   Professional Developer and Mathematician

嗨,我叫 Fred Baptiste。

我从数学博士开始了自己的职业生涯,并且在多种技术和语言方面进行了 25 年以上的专业编程,包括 Python、.Net(C# 和 VB)、Java、C ++ 和 JavaScript 等,以及数据库 包括 MS SQL Server 和 Postgres 等关联式 SQL 数据库( relational SQL database )以及 MongoDB、Couchbase 和Neo4j 等非 SQL数据库。

自 2011 年以来,我一直专注于 Python,主要用于 REST API 开发以及使用后端数据库(如SQL Server、Postgres 和 MongoDB)进行数据管理和分析。

我花了很多时间和精力学习并深入了解 Python 并编写了惯用的 Python,我想与大家分享一下。

我绝对是一个 Python 爱好者,原因很多,我也想和你分享这种热情!

英文字幕:无

优惠信息

如何购买这门课程比较划算?可以参考课程合购优惠方案


报名参加课程 

<

Sponsored by Udemy

也许你会有兴趣

 欢迎使用e-mail订阅 Soft & Share 

发表评论

Powered by WordPress.com.

Up ↑

%d 博主赞过: