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++的内 联函数,后者的目的是调用函数时不占用栈内存从而增加运行效率。
辨析题:为什么量化代码一长就必须靠函数收束?
因为函数是控制复杂度的最小结构,没有它,代码就无法测试、复盘和稳定扩展。