python 函数——结构化思维

引言

说到函数,想必大家都知道,初中某天数学课上,光头的老师不耐其烦地给我们讲述着函数这样一个概念,我们则再春风地诱惑下向往梦乡。也曾经有不知道多少脑细胞在和函数的战斗中阵亡,线性函数、二次函数、指数函数、三角函数、简单函数、复杂函数、特殊函数、复变函数、泛函数…总有一款让你爽一爽

函数基础

一时说的太远,忘记怎么讲python的函数了!编程语言中的函数可以理解地更简单点,就是实现一个功能或者变换,基本语法是:

def func(*args, **kwarg)
	"""函数说明"""
	...
	return res

以上包含

  • 函数名称,func可以是chifan、shuijiao、da_doudou
  • 函数的输出参数,参数可以有两类,一类是是普通参数,类似一个变量名;另一类是关键字参数,可以传入某人值。函数并不一定需要参数这个东西,比如你大喊,这个动作可以简单定义为
def dahan():
	print("啊啊啊啊")

当然你可以通过一个参数来设定大喊的时间(次数)

def dahan(t):
	print("啊"*t)

你觉得一般人只能大喊三声,然后就没劲了,于是次数可以设定默认值

def dahan(t = 3):
	print("啊"*t)
  • 函数主体,上一个例子就是print的过程,函数主体可繁杂可简,可咸可甜… 函数又可以套函数,除了套别人还可以套自己(迭代器)… 总之只要你想得到,就可以用函数来实现。(不排除一些复杂的数学问题,其实你更根本想不到 ,扎心!)
  • 函数返回值,以前老是总是说函数是一个映射,从一个集合映射到一个集合,输入x总是能得到一个y,套用到python函数也是可以的,就是返回值了。当然并不是所有函数都需要函数返回值,比如上面解释的就没有。函数返回值可以是一个,也可以是多个。多个其实可以理解为一个,想到把多个返回值打包为一个元组
return a, b, c 和 return (a, b, c)是等价的

最开始学python的时候总是不知道python有多个返回值怎么用呢?其实很简单

def  func_007():
	a = b = c = 1
	return a, b, c

e, f, g = func_007()

以上函数就是调用函数007,e,f, g被赋值为1

  • 函数说明,个人喜欢用三个双引号,函数说明不言而喻了,就是说明函数用来干啥的?你说的越清楚,使用者越方便,特别是第三方使用的时候,函数说明可以帮助他人快速使用起来,节约时间,不用推敲你的代码具体实现逻辑。这个类推到做项目,你的项目文档做的越好,使用方会越舒服,对你项目的认可也会越好。(虽然我的说明写的稀烂,但是教科书shi经验不可否认…)

其他知识

  • 函数参数的一些问题。我们给一个函数传递一个参数的时候是值传给参数,比如
# 调用前面的dahan ,实际是把tx的值赋给了变量t
tx=5
dahan(t=tx)  

上面的情况很好理解,但是也存在不好理解的情况:

a = []
def func_008(d):
	d.append(1)
	d = 1
func_008(a)
print(a)

上面调用函数后,a最后变成[1]。其实很奇怪的,我们只是把a传给了函数,通常情况下我们认识的函数,是一个封装,函数内部运算应该不会影响外部的变量。怎么理解上面的过程呢?

  • a=[], a是一个空数组的引用,调用fun_008(a), 相当于d=a,d也成了对空数组的引用,d和a指向相同的数据而不是给d一个新的数据(新的数据可理解为使用新的内存),

  • d.append(1)相当于给空数组添加1,因为此时a、d指向同一个数组,a自然是[1]

  • 然后d=1,这个时候d被指向另一个数据1,并不是修改原来的空数组,不会改变a
    说得有点绕,回头在捋一捋。

  • lambda表达式, lambda其实可以理解为一种简洁地函数第一方式,不需要通过关键字def来声明函数。我个人经常在排序的时候使用到lambda表达式

a = [(liming, 10), (hanmeimei, 99), ('xiaoai', 88)]
sorted(a, key=lambda x: x[1], reversed=True)

通过以上排序我们知道liming确实学习成绩很糟糕。lambda表达式其实返回给我们一个函数对象,输入时x,输出是x的第二个元素。对这里说道了函数对象,python里面一切都是object,object都可以作为参数进行传递。

  • 关于为什么需要函数?a)最直接的原因,函数是对功能的封装,实现了一些功能,可以支持复用。比如上面我们定义了dahan这个函数,无论任何时候我们想要大喊的时候都可以调用dahan,减少了重复开发的成本。当然这个函数比较简单,复用不复用没那么重要。当你的函数能够实现复杂功能时,效果就明细了,比如我们都很喜欢调用numpy库的函数。b)封装后也更好维护,相同的功能我们只需要维护一个函数就好了,即使出问题了,我们只要改函数中代码就好。c)还讲一下个人在使用函数的收获,当你要实现一整套算法时,你可能先想这个算法的过程分为哪几个大的部分,然后每个部分可以切分为具体哪些小部分,最后具体实现小部分的功能。这个过程可以简单地用下面的例子来论证
# 一天历程

def chifan():
	print("我该吃啥")
	print("我吃饱了") 
	...
def da_doudou():
	...
def shuijiao():
	...

chifan()
da_doudou()
shuijiao()

你实现你一天怎么过的时候,你一下子想到了吃饭、打豆豆、睡觉,然而吃饭并不简单,里面有思考,有犹豫,有享受、有吃饱后的空虚寂寞冷…这就是结构化思维,利用函数我们可以很好地结构化编程,写出来的函数思路清晰、骨骼惊奇 … 一看就是练武奇才我这里有一本武功秘籍…飘了

总结

啥也不说了,各位大侠是时候动手写写函数了…

参考

  • 《python自然语言处理》
  • 廖大师python基础教程
### Python 函数用于计算思维训练 #### 方法和示例 Python 提供了一种强大的方式来进行计算思维训练,特别是通过函数的设计与实现。函数不仅有助于代码的模块化设计,还促进了逻辑思考能力的发展。 #### 问题分解 一个问题可以被拆解成更小的部分以便更容易解决。例如,在处理复杂的数据集时,可以通过编写多个小型专用功能来逐步解决问题[^1]。下面是一个具体的例子: 假设有一个需求是要找出列表中所有偶数的位置索引。这个问题可以通过构建辅助函数 `is_even` 来判断单个数字是否为偶数,再利用另一个遍历整个列表并收集符合条件项位置的功能完成最终目标。 ```python def is_even(number): """Check if a number is even.""" return number % 2 == 0 def find_indices_of_evens(lst): """Find indices of all even numbers in the list.""" result = [] for index, value in enumerate(lst): if is_even(value): result.append(index) return result ``` 这段代码展示了如何将大任务分割成易于管理和理解的小部分——这正是计算思维的核心之一。 #### 自定义函数的应用 除了上述提到的问题分解技巧外,还可以创建自定义函数以满足特定的需求。比如想要统计一段文字里单词的数量,就可以按照以下步骤操作[^3]: 1. 定义一个新的函数接受字符串作为输入; 2. 使用内置 split() 方法把句子切分成词组; 3. 计算得到的结果集合大小即代表总共有多少个不同词语; 这里给出完整的解决方案如下所示: ```python def word_count(text): words = text.split() unique_words = set(words) return len(unique_words) example_text = "This is an example sentence with some repeated words like this and that" print(word_count(example_text)) ``` 此程序片段说明了怎样运用自定义函数有效地解决了实际生活中的一个小挑战。 #### 实现加法运算器 为了进一步展示 Python 函数对于培养计算思维方式的重要性,考虑这样一个场景:开发一个简单的计算器应用程序,其中一部分负责执行两数值相加的任务。该过程涉及到了基本算法的理解以及良好的编码习惯养成等方面[^4]。 ```python def add_numbers(a, b): """Add two given numbers together""" sum_result = a + b return sum_result num1 = float(input("Enter first number: ")) num2 = float(input("Enter second number: ")) result = add_numbers(num1, num2) print(f"The addition of {num1} and {num2} equals to {result}") ``` 以上实例强调了函数在简化重复工作流程方面的作用,同时也体现了结构清晰、易于调试的优点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忘记开挂的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值