什么是函数,干嘛啊,怎么干。一个py程序员的视角.md
什么是函数,干嘛啊,怎么干。一个py程序员的视角.md
前言
本文参考
https://www.runoob.com/python/python-functions.html
本质
math definition
y = f(x)
这里的f 就是函数。
你给f 一点参数,f 给你返回 使用这个参数x 后的结果y
py definition
def functionname( parameters ):
function_suite
return [expression]
or 你看到如下:
class Solution:
def fizzBuzz(self, n: int) -> List[str]:
# your code here
class 是类,是对象的蓝本
我们首先看到 class 声明,他的意思是,Solution 是一个现实世界玩意的计算机表示。
这里 Solution 就是 解决 leetCode 某道题目的 蓝本,这个蓝本里,你定义了解决问题的方式,
这个方式,方法, method or function ,中文把它称为 “函数”
回到函数
现在你知道,一个函数是定义了: 一个对象 能干的事情。
比如,我是人, eat 就是我的能干的事情。(而且 eat 之前,我会张开嘴)
class Human:
def eat(self, 蛋糕: 甜点类食品) -> Boolean:
for allTheCake in TheWorld:
self.openMouth()
def openMouth():# 一个函数里 还能定一个 子函数: 一个事情的包含的详细步骤
print("Human Always open mouth before they eat!")
return false # 吃蛋糕,我还没吃饱
so, 你看到,作为一个人,我会eat ,而且我 eat 要有参数地eat,我吃蛋糕(属于甜点类食品)
蛋糕: 甜点类食品
一如 n: int
, 这是py 的传递参数给一个function(or call it: method,behaviour)的约定
aka:n: int
== yourParam: TheTypeOfParam
.
通过 函数定义,当新的上帝改造人类,并且他想要更改 Human 的 eat 行为,于是,新上帝就可以如下修改
class Human:
def eat(self, 葡萄糖: 直接消化类食品) -> int:
for allTheCake in TheWorld:
self.injection()
def injection():
print("Human now use 🏥针头💉 before they eat!")
return 80 # 注射葡萄糖是更加高效,新上帝规定 这个aciton可以令人类达到80%饱腹感, 他设定了新的 eat 行为返回 一个精确的数值,而不是饱或者不饱 的boolean 值
一个结论
现在你可以这样去看 使用py3 的上帝,是这样定义他的human 能发生的 aciton 的
class Human:
def action(theThing1YourNeedForAction: theThing1Type, theThing2YourNeedForAction: theThing2Type, /*more if god like*/) -> theReturnTypeOfThisAction:
# 这里是本个 action/ function 自己内部的处理
self 是什么?
翻译: self: 自己
当我们有了 一个 对象的蓝本,我们就可以创造一个对象。
创造的对象,创造的每个人都有自己的属性,如何访问每个对象的属性呢?
你可以使用self 访问一个对象的某个属性:
比如,每个人都有一个房屋列表,每个人(一个人就是一个上帝创造的对象),都可以贩卖自己的房子:
class Humam:
houseList = [] # 每个人可以通过 self.houseList 来访问自己的房屋列表
def soldMyHouse(self) -> int:
#新的出售价格是:(如果我要卖我房屋列表里的第一个房子)
# 新的价格 等于: 取得 第一个对象 by: self.houseList[1]
# 用这个房屋对象的houseSize 乘以 当时买的old_price 再乘以 今年涨了5倍
new_price = self.houseList[1].houseSize * self.houseList[1].old_price * 5
'''
更好的方式:
house_to_be_sold = self.houseList[1]
new_price = house_to_be_sold.houseSize * house_to_be_sold.old_price * 5
'''
return new_price
而house 的蓝本可能是如下定义的:有名字,平方数,当时购买的价格
class House:
houseName = "myHangzhouHouse"
houseSize = 120
purchasePrice = 10000 # 当时买的 10000 / 平方米
# 你可以为你创造/购买的房子,命新的名,by using: self
def changeMyHouseName(self, new_name: str):
self.houseName = new_name
further reading about self
https://blog.csdn.net/CLHugh/article/details/75000104