Day 3 详细学习计划:Python函数与模块 学习目标 ✅ 掌握Python函数定义与高级参数处理 ✅ 理解模块化开发与包管理机制 ✅ 对比Java方法与Python函数的差异 ✅ 完成数学工具模块开发...# 可变位置参数(类似Java的...) def sum_all(*args): return sum(args) # 可变关键字参数(Java无直接对应) def print_info(**...包math_tools,包含以下模块: basic.py:基础数学函数 advanced.py:高级计算函数 编写单元测试 打包为可安装模块 4.2 代码实现 basic.py...注意循环引用问题(可使用weakref模块) 六、扩展练习 实现缓存装饰器 使用functools.lru_cache装饰斐波那契函数,对比性能差异 开发命令行计算器 使用argparse...关键要点: 1️⃣ Python的函数参数灵活性远超Java的方法参数 2️⃣ 装饰器是实现AOP编程的利器 3️⃣ 合理的模块划分是大型项目的基础 本篇的分享就到这里了,感谢观看,如果对你有帮助
计算机程序使用函数这个概念来解决这个问题,即使用函数来减少重复代码和分解复杂操作,本节我们就来谈谈Java中的函数,包括函数的基础和一些细节。...第二个函数名字叫做print3Lines,它的目的是在屏幕上输出三个空行,它没有输入参数,操作是使用一个循环输出三个空行,它没有返回值。...的时候,实际上会转换为调用 max(0, new int[]{2,4,5}),使用可变长度参数主要是简化了代码书写。...我们来看一个例子,求一个数的阶乘,数学中一个数n的阶乘,表示为n!,它的值定义是这样的: 0!=1 n!=(n-1)!...用递归表达的计算用递归函数容易实现,代码如下: ? 看上去应该是比较容易理解的,和数学定义类似。
根据PEP的规定,必须使用4个空格来表示每级缩进(不清楚4个空格的规定如何,在实际编写中可以自定义空格数,但是要满足每级缩进间空格数相等)。...使用Tab字符和其它数目的空格虽然都可以编译通过,但不符合编码规范。支持Tab字符和其它数目的空格仅仅是为兼容很旧的的Python程序和某些有问题的编辑程序。...函数 Python的函数支持递归、默认参数值、可变参数,但不支持函数重载。...当定义对象方法时,必须显式地定义第一个参数,一般该参数名都使用self,用于访问对象的内部数据。...数学运算 Python使用与C、Java类似的运算符,支持整数与浮点数的数学运算。同时还支持复数运算与无穷位数(实际受限于计算机的能力)的整数运算。
编程范例基于lambda演算,下面简要说明: Lambda演算 它使用表达式来代替语句。与执行语句以分配变量的语句不同,表达式的求值产生一个值。...Lambda演算构成了几乎所有使用的功能编程语言的基础。 Lambda Calculus由Alonzo Church开发,是用于研究具有函数的计算的框架。使用lambda演算认为任何事物都是可计算的。...纯函数仅接受一次参数并产生不变的输出。因此,它们不会产生任何隐藏的输出。它们使用不可变的值,从而使调试和测试更加容易。 它的样式将函数视为值,并将其作为参数传递给其他函数。...领域特定的声明性语言(例如Lex / Yacc和SQL)甚至使用这种编程范例的某些元素来避开可变值。...通常,此范例广泛用于: 针对并发或并行的应用 进行数学计算 总结 除了纯函数式编程语言外,还可以在非函数式编程语言中建立函数式编程方法。
针对其中第2个决定数学基础的问题——算术公理之相容性,年轻的哥德尔提出了哥德尔不完备定理,解决了这个问题形式化之后的前两点,即数学是完备的吗?数学是相容的吗?哥德尔用两条定理给出了否定的回答。...n = n (λb.FALSE) TRUE add = succ n1 n2 函数式编程语言的发展 在这之后,随着通用计算机的产生,人们发觉使用机器码写程序太没有效率。...S表达式 ML和Haskell都是静态强类型函数式语言 ML是第一个使用Hindley-Milner type inference algorithm的语言 Lisp和ML都是call-by-value...我们都知道从某个人开始依次报数,最后得到的数字就是总人数,其实这就是一种不可变计算的游戏,为什么这么说呢?因为报数其实一个计算的过程,第一个人计算出1这个数,传递给第二个人。...不可变的树状结构 递归 可计算很大问题就是得实现递归功能。
此处的函数区别于我们数学上的函数,在编程世界中,函数(Functions)是指可重复使用的程序片段。...当参数组合使用时,需要注意以下原则: 有默认值的参数需要放在无默认值参数的后边 当顺序参数和可变参数混合使用时,可变参数的取值为超出顺序参数的实参部分,且可变参数在顺序参数之后。...# 语法 lambda [arg1 [,arg2,.....argn]]:表达式 语法说明: arg为参数,可以任意多个,使用逗号分隔 表达式 为函数体,使用冒号开头 表达式 的返回值即为函数的返回值...,使用冒号和参数隔离,注释为一个表达式。...函数的注解在函数参数括号后,使用'->' 符号开头,也是一个表达式。
例如,计算两个数的和可以使用 Lambda 表达式: add = lambda x, y: x + y result = add(3, 5) 这里,lambda x, y: x + y 定义了一个匿名函数...示例四:Reduce 函数 functools 模块中的 reduce 函数是一个将两个参数的函数累积到序列中所有元素的函数。...例如,计算阶乘可以使用 reduce 函数: from functools import reduce n = 5 factorial = reduce(lambda x, y: x * y, range...(1, n + 1)) 这里,reduce 函数将 lambda 表达式应用于从1到n的所有元素,累积计算阶乘。...数学之趣: 通过运用数学概念,如链式比较,使得代码更为直观和数学化。 魔法力量: 装饰器作为一种强大的工具,为函数增加了灵活性和可扩展性,展现了一种魔法般的力量。
) 将x转换为一个长整数 float(x) 将x转换到一个浮点数 complex(real [,imag]) 创建一个复数 str(x) 将对象 x 转换为字符串 repr(x) 将对象 x 转换为表达式字符串...eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象 tuple(s) 将序列 s 转换为一个元组 list(s) 将序列 s 转换为一个列表 set(s) 转换为可变集合...oct(x) 将一个整数转换为一个八进制字符串 查看变量数据类型: a=3 import types type(a) int(a) #转换为整型 str(a) #转换为字符串 Python数学函数...返回给定参数的最大值,参数可以为序列。 min(x1, x2,...) 返回给定参数的最小值,参数可以为序列。...seed([x]) 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。
听起来有点绕口,但是它实际上就是函数调用的参数替换。比如: 图 10 可以使用1替换m,3替换n,那么整个表达式可以化简为4。这也是函数式编程里面的引用透明性的由来。...图 15 我们把λ演算中的f和x分别取为countTime和x,代入运算就得到了我们的自然数。 这也说明了不管你使用符号系统还是JavaScript语言,你想要表达的自然数是等价的。...Expression 基于表达式:表达式可以被计算,促进数据流动,状态声明就像是一个暂停,好像数据到这里就会停滞了一下。...Immutable 不可变性:参数不可被修改、变量不可被修改---宁可牺牲性能,也要产生新的数据(Rust内存模型例外)。...图 36 一个充满变化的世界是混沌的,在函数式编程世界,我们需要强调参数和值的不可变性,甚至在很多时候我们可以为了不改变原来的引用值,牺牲性能以产生新的对象来进行运算。
这类类型的变量本质上是一段存储空间的起始地址,因为结构化数据的存储空间的大小是由所有属性叠加的,且是可变的,不能或很难实现原子性的拷贝,且空间代价很大,因此参数传递时并不是机械的拷贝所有属性、所有空间,...,即有浮动小数点的数,float - 32 位,直接赋值时必须在数字后加上 f 或 F,指示编译器这是一个float型浮点数double - 64 位,赋值时一般在数字后加 d 或 D,指示编译器这是一个...非数值boolean 类型是非数值类型的,因此和其他基本数据类型不能参与计算。最小使用原则即在满足需求的前提下,优先使用更小的类型,可以节省大量的内存,提升程序的性能。...图片拆箱(unboxing)是将封装类的引用类型转换为基本数据类型,例如:Integer 转 int,目的是可以参与常规的数学运算。本质是编译器通过调用包装类的 xxxValue 方法实现的。...(xxx 代表对应的基本数据类型)自动拆箱(auto unboxing)当包装类与基本数据类型混合运算时,Java会调用该包装类的xxxValue获得对应的值类型的值,然后才参与表达式的计算。
按照 FP 思想,不能使用循环,那我们该如何去解决? 抛出异常会产生副作用,但如果不抛出异常,又该用什么替代呢? 函数式编程不允许使用可变状态的吗?如何没有副作用的表达我们的程序?...为啥会有 lambda 演算系统 1、lamda 诞生的目的 lambda 是一种解决数学中的函数语义不清晰,很难表达清楚函数的结构层次的问题的运算方案。...也就是说,函数不用指明操作的参数,而是让组合它的函数来处理参数。 通常使用柯里和组合来实现 pointfree。...PS: 这就好像是一直使用函数式语言的人突然接触命令式语言,也会满头雾水的。 七、函数式编程不允许使用可变状态的吗?如何没有副作用的表达我们的程序?...可以使用局部的可变状态,只要该局部变量不会影响外部,那就可以说改函数整体是没有副作用的。 八、为什么函数式编程建议消灭掉语句? 因为语句的本质是:在于描述表达式求值的逻辑,或者辅助表达式求值。
,不可变意味着不可原处修改。...关于可变、不可变对象,后面的文章将会经常提到,请先留意这两个词。...正如上面最后一个计算表达式(3**100),它将所有数字都显示出来了。就算是计算3**10000,3**1000000,python也不会报错,不过3的100万次方,显然需要花上一段时间来计算。...还有专门的数学模块math、取随机数的模块random等。 浮点数 由于硬件的原因,使得计算机对于浮点数的处理总是不精确的。...例如,使用浮点数计算 >>> 0.1 * 3 - 0.3 5.551115123125783e-17 它本该等于0,但结果却是无限接近于0,因为计算机硬件用于存储数值位数的空间有限。
探索函数式编程(FP)概念 另一方面,函数式编程将计算视为对数学函数的求值,并避免改变状态和可变数据。函数式编程将函数作为主要的构建块。这些函数接受纯输入并产生可预测的输出,而无需修改外部状态。...一流的功能:函数被视为一等公民,这意味着它们可以分配给变量,作为参数传递,并从其他函数返回。 引用透明性:函数的结果仅取决于其参数,而不取决于任何可变状态或外部因素。...让我们使用函数方法来编写计算1到10的偶数平方和的逻辑: public static void main(String[] args) { int sum = IntStream.range...然后对流进行偶数过滤,使用lambda表达式进行平方,最后减少到平方和。 两者比较 可变性: 面向对象编程(OOP)通常涉及可变状态,其中对象可以随时间改变其内部状态。...目的是通过纯度来减少副作用。 并发 需要仔细管理共享状态。 通过不可变数据提升并发性。 表达式 提供清晰的抽象和直观的建模。 导致简洁的、声明性的函数代码。
幂 (**) 幂运算符用于计算一个数的另一个数次幂。...幂(**)运算符可以计算非常大的数,但请注意Python的整数大小限制(取决于系统架构,通常是很大的数)。 4. 位运算 Python还支持对整数进行位运算,这些运算直接操作整数的二进制表示。...对于负数,按位取反和右移操作的结果可能与你直觉上的“数学”结果不同,因为Python(和大多数现代计算机)使用二进制补码来表示负数。...它们被用于计数、索引、循环控制、数学计算等多种场景。 浮点数类型 Python中的浮点数类型(float)用于表示具有小数部分的实数。...,可以使用Python的re模块来应用正则表达式。
表达式作为内置函数bool()的参数时如果返回True,那么这样的表达式作为条件表达式时表示条件成立。...可哈希对象(hashable object):可以计算哈希值的对象,概念等价于不可变对象。...可以使用内置函数hash()计算一个对象的哈希值,如果试图计算不可哈希对象的哈希值会抛出异常。...函数(function):和数学上函数的概念类似,表示一种变换或处理,可以接收0或多个输入(参数),给出1(可能为空值)或多个输出(需要放在可迭代对象中整体返回)。...可变长度参数:有def func(*p)和def func(**p)两种形式,前者可以接收任意多个位置参数并放入元组p中,后者可以接收任意多个关键参数并放入字典p中,元组或字典中元素数量取决于实参的数量
0 To Begin//:向下取整除法**:乘方在交互模式下,上一次打印出来的表达式被赋值给变量 _如果不希望前置了 \ 的字符转义成特殊字符,可以使用 原始字符串 方式,在引号前添加 r 即可python...可选参数 start 和 end 是切片符号,用于将搜索限制为列表的特定子序列。返回的索引是相对于整个序列的开始计算的,而不是 start 参数。...其结果将是一个新列表,由对表达式依据后面的 for 和 if 子句的内容进行求值计算而得出1.4、del语句>>> a = [-1, 1, 66.25, 333, 333, 1234.5]>>> del...序列解包要求等号左侧的变量数与右侧序列里所含的元素数相同。注意可变参数其实也只是元组打包和序列解包的组合。...集合对象也支持像 联合,交集,差集,对称差分等数学运算。花括号或 set() 函数可以用来创建集合。
函数式编程简介函数式编程是一种编程范式,它将计算视为数学函数的求值,避免了状态变量的使用,强调函数之间的纯粹性和不可变性。...# 纯函数示例:计算两个数的和def add(a, b): return a + b2.3 高阶函数(Higher-order Functions)高阶函数是指接受函数作为参数或返回函数作为结果的函数...函数式编程的实践应用3.1 匿名函数与Lambda表达式Lambda表达式是Python中的一种简洁的匿名函数语法,常用于函数式编程中的简单函数定义。...# 使用Lambda表达式定义匿名函数double = lambda x: x * 2print(double(5)) # 103.2 闭包(Closures)闭包是指一个函数捕获并且可以访问其定义范围之外的变量...函数式编程不仅能够提高代码的可读性和可维护性,还能够帮助开发者编写出简洁、高效的代码,提升开发效率,促进项目的快速迭代和发展。
repr(x) #将对象 x 转换为表达式字符串,为供解释器读取的形式; tuple(s) #将序列 s 转换为一个元组 list(s) #将序列 s 转换为一个列表 set(s) #转换为可变集合 dict...print(eval(' 2 ** 2'),eval('pow(2,2)')) # 执行一个字符串表达式,可以执行python的一些数学函数和计算 print(set('runoob'),set('...如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响 以下是调用函数时可使用的正式参数类型: 必需参数, def printme(argv,argv1) = 关键字参数,函数调用使用关键字参数来确定传入的参数值...Python函数参数案例 注意事项: 1) Python一切皆对象,严格意义上我们不能说是值传递还是引用传递,我们应该说不可变对象和可变对象。...3) 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
print(eval(' 2 ** 2'),eval('pow(2,2)')) # 执行一个字符串表达式,可以执行python的一些数学函数和计算 print(set('runoob'),set('...如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响 以下是调用函数时可使用的正式参数类型: 必需参数, def printme(argv,argv1) = 关键字参数,函数调用使用关键字参数来确定传入的参数值...,否则会报错 图片 Python函数参数案例 注意事项: 1) Python一切皆对象,严格意义上我们不能说是值传递还是引用传递,我们应该说不可变对象和可变对象。...仅仅能在lambda表达式中封装有限的逻辑进去。 2) lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。...3) 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
2. constexpr 和 const 的适用场景 编译期常量:如果需要在编译期确定值,应该使用 constexpr。例如,数组大小、数学常量等。...运行时常量:如果值在运行时确定,但在整个程序运行期间不变,使用 const。例如,配置参数、运行时计算结果等。...使用场景: 用于返回一个不可变的值。 适用于需要在运行时计算的场景。...const int runtimeValue = someFunction(); 不可变参数: 当函数参数在函数内部不应被修改时,使用 const 修饰参数。...总结 const:主要用于修饰变量、指针、函数参数和成员函数,表示这些对象在运行时不可变。适用于运行时常量和不可变参数。 constexpr:主要用于修饰变量和函数,表示这些对象在编译期求值。