Python量化交易知识站Python · JoinQuant · Backtest · Factors

Chapter · 第 140 页起

第7章 Python的函数及应用

章节主张

第七章的关键意义,是让你开始把重复动作抽象成函数,并建立参数、作用域和职责边界意识。

中文释读

量化策略不是一段长代码,而是很多职责明确的动作模块:选股、过滤、交易、记录、提醒。

函数章节读懂了,后面看 initialize、market_open、选股函数、过滤函数就不会慌。

本章知识路线

关键论据

  • 函数是可复用动作单元。
  • 参数类型决定接口清晰度。
  • 作用域决定变量是否会失控。

行动清单

  • 把重复逻辑改写成函数。
  • 练习参数和返回值意识。
  • 区分局部变量、全局变量和策略上下文。

本章图版学习路径

图版按知识点分组,用来把理论页、平台页和代码页重新接上。

源章节深读

以下卡片基于章节和小节起始页 OCR,并补上“问题、动作、提醒”三层解读。

7.1 函数的定义与调用

Python 量化交易实战入门与技巧 7.1 函数的定义与调用 程序需要完成多个功能或操作,每个函数可以实现一个独立功能或完成 一个独立的操作,因此学习“程序设计”必须掌握函数的编写。因为函数可 以被多次调用,所以可以减少重复的代码,即函数能提高应用的模块性和代 码的重复利用率。 Python 提供了许多内建函数,比如 print()。但也可以自己创建函数,这 被叫作用户自定义函数。 7.1.1 函数的定义 在Python 中,自定义函数的规则如下: 第一,函数代码块以def 关键词开头,后接函数标识符名称和圆括号()。 第二,任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用 于定义参数。 第三,函数的第一行语句可以选择性地使用文档字符串,用于存放函数 说明。 第四,函数内容以冒号起始,并且缩进。 第五,retur[表达式]结束函数,选择性地返回一个值给调用方。不带 表达式的 retur 相当于返回 空值。

这节解决什么问题:这一节解决策略逻辑如何被拆分成可复用动作单元的问题。
怎么用到自己的系统:适合把重复动作逐步改写成函数和模块。
常见错误:不要把所有策略动作都塞进一个大函数。

7.2 参数传递

Python 量化交易实战入门与技巧 7.2 参数传递 在Python 中,类型属于对象,变量是没有类型的,例如: × = [1,2,3,4,5,61 Y= “bike" 在上述代码中,[1,2,3,4,5,61 是 List 类型,“bike” 是 String 类型, 而变量x是没有类型,它仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。 7.2.1 不可更改对象 在Python 中,字符串(string),元组(tuple)和数值型(number) 是不可更改对象。例如,变量赋值a=6 后再赋值 a=18,这里实际是新生成一 个 int 值对象18,再让a指向它,而6被丢弃,不是改变a的值,相当于新 生成了a。 在Python 函数的参数传递中,不可变对象类似C++的值传递,如整 数、字符串、元组。如 fun (a),传递的只是a的值,没有影响a对象本身。

这节解决什么问题:这一节在补这一章的关键能力模块。
怎么用到自己的系统:适合把它放回本章主线,理解它在量化学习系统里的位置。
常见错误:不要孤立记忆这一节的术语和代码片段。

7.3 函数的参数类型

Python 量化交易实战入门与技巧 传入函数的和在末尾添加新内容的对象用的是同一个引用,所以函数内 取值和函数外取值是一样的。 单击菜单栏中的“Run/Run Module” 命令或按下键盘上的 “F5”,就 可以运行程序代码,结果如图7.3所示。

这节解决什么问题:这一节解决策略逻辑如何被拆分成可复用动作单元的问题。
怎么用到自己的系统:适合把重复动作逐步改写成函数和模块。
常见错误:不要把所有策略动作都塞进一个大函数。

7.4 匿名函数

Python 量化交易实战入门与技巧 #第一次调用 printinfo 函数 printinto( 10); print(“-- ----”) #第二次调用 printinto函数 printinfo( 70,60,50,90,120); 在这里两次调用函数,第一次调用函数只传入必需参数,这样可变参数 的变量的长度就为0,即len(vartuple)==0成立,这样就会显示“没有可变 参数传入”。 第二次调用函数传入5个参数,第一个参数是必需参数,其他4个参数 是可变参数。这样 len(vartuple)==0不成立,程序运行 else 语句内容,即 通过 for 循环语句显示可变参数的值。 单击菜单栏中的“Run/Run Module” 命令或按下键盘上的“F5”,就 可以运行程序代码,结果如图7.8所示。

这节解决什么问题:这一节解决策略逻辑如何被拆分成可复用动作单元的问题。
怎么用到自己的系统:适合把重复动作逐步改写成函数和模块。
常见错误:不要把所有策略动作都塞进一个大函数。

7.5 变量作用域及类型

第7章 Python 的函数及应用 第三,lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外 或全局命名空间中的参数。 第四,虽然lambda 函数看起来只能写一行,劫不等同于C或C++的内 联函数,后者的目的是调用函数时不占用栈内存从而增加运行效率。

这节解决什么问题:这一节在补这一章的关键能力模块。
怎么用到自己的系统:适合把它放回本章主线,理解它在量化学习系统里的位置。
常见错误:不要孤立记忆这一节的术语和代码片段。
辨析题:为什么量化代码一长就必须靠函数收束?

因为函数是控制复杂度的最小结构,没有它,代码就无法测试、复盘和稳定扩展。