58网站怎么做浏览度才高,北海哪里做网站建设,邯郸网站建设产品介绍,策划方案免费网站目录
1.函数相关术语
2.函数类型分类
3.栈
4.位置参数和关键字参数
5.默认参数
6.局部变量和全局变量
7.返回多个值
8.怀孕函数
9.匿名函数
10.可传递任意个数实参的函数
11.函数地址与函数接口
12.内置函数修改与函数包装 1.函数相关术语
函数的基本概念有函数头…目录
1.函数相关术语
2.函数类型分类
3.栈
4.位置参数和关键字参数
5.默认参数
6.局部变量和全局变量
7.返回多个值
8.怀孕函数
9.匿名函数
10.可传递任意个数实参的函数
11.函数地址与函数接口
12.内置函数修改与函数包装 1.函数相关术语
函数的基本概念有函数头函数名形参和实参函数体如下图所示 参数是可选的也就是说函数可以不包含参数比如 def main():使用 return result 返回语句来返回一个值函数为带返回值的函数。不使用 return 语句函数为不带返回值的函数。不用 return 的函数python 默认函数末尾加上了一个 return None就是说返回了一个 None空值。 2.函数类型分类 带参数有返回值的函数 def myfunc(a, b):result 0for i in range(a, b 1):result ireturn result 不带参数无返回值的函数 def main():print(月满则亏)print(水满则溢)print(花满则衰)print(爱满则痴)main() # 执行 main() 带参数无返回值的函数 def nprint(n):for i in range(n):print(xxxxxx)print(nprint(2)) 3.栈 栈是在函数调用时产生的一个内存区域用来存储函数的参数和局部变量的激活记录。 当调用一个函数时这个函数的参数和局部变量的激活记录被压入栈。 当这个函数执行完毕这些激活记录将会被从栈中删除。 示例代码
def func(Data1, Data2):Data3 Data1 * Data2return Data3ret func(1, 2)
对于语句ret func(1, 2)func在调用时会产生一个栈实参传递给形参以及函数体内部的变量激活记录都会逐步记录在栈中称为压入栈函数调用完毕这些记录会逐步从栈中清除出去出栈。
栈的特点后进先出。就是最后进来的激活记录先被弹出堆栈。 4.位置参数和关键字参数
调用函数时实参的值传递给形参这个过程叫做值传递。值传递有多种方式比如按默认位置或者使用关键字参数。比如下面这个例子中f函数有3个关键字参数x,y,z。
def f(x, y, z):return (x y) / z# 使用位置参数调用函数
print(f(1, 2, 3)) # 1.0# 使用关键字参数调用函数
print(f(z2, y3, x5)) # 4.0# 同时使用位置参数和关键字参数
print(f(7, z3, y2)) # 3.0
注意调用函数时位置参数在左边关键字参数在右边。
5.默认参数 函数定义时 形参如果带有关键字表示当实参不赋值时该变量具有默认值。 而当实参有赋值时使用实参的赋值而不是用默认值。 # 非默认值参数必须在默认值参数之前
def f(x, y1, z2):return x y zprint(f(1, 1, 1)) # 3
print(f(y1, x2, z3)) # 6
print(f(1, z3)) # 5 6.局部变量和全局变量 在函数内部定义的变量被称为局部变量。 在函数之外创建的变量被称为全局变量。 使用 global variable 语句将局部变量变为全局变量。 示例代码 x 1
y 1
z 1def f(x):global yx 2y 2z 2f(100)
print(x) # 1
print(y) # 2
print(z) # 1 在以上代码中 一开始定义了x和y它们是全局变量。然后定义了一个函数f形参有x注意这里的x为函数的形参名跟前面那个全局变量x不是同一个函数体内部先使用了global y语句它的作用是函数内部等会如果有y的调用则y调用的是全局变量那个y。x 2语句是一个赋值语句注意这条赋值语句的x不是全局变量那个x是形参变量x因此全局变量那个x的值不会发生改变仍为1y 2语句由于global y的作用这里的y是全局变量的那个y因此全局变量y的值会变成2z 2语句由于没有global z语句这里的z是函数内部产生的局部变量因此这里的赋值语句不会对全局变量那个z造成影响。 7.返回多个值 python 函数允许返回多个值。 函数多个数本质上是以元组的形式在传递值。 def sort(n1, n2):if n1 n2:return n1, n2return n2, n1print(sort(2, 3)) # (2, 3)
a, b sort(3, 2)print(a) # 2
print(b) # 3def func(num1, num2):return num1 num2, num1 - num2x func(2, 3)
print(type(x)) # class tuple
8.怀孕函数
怀孕函数就是函数内部又定义了一个函数。 python 函数很特殊可以无限嵌套。 def Test():def TestX():print(hello world)for i in range(3):TestX()Test() 9.匿名函数 匿名函数就是函数的简洁表达使用关键字 lambda 实现。
# 例子1
myfunc lambda a, b: a b
print(myfunc(2, 3)) # 5# 例子2用来装逼
ret (lambda a, b: a * b)(4, 5)
print(ret) # 20
(lambda data: print(data))(hello world) # hello world
10.可传递任意个数实参的函数
在Python中可以创建一个函数它可以接收任意数量的实参。这通过使用星号表达式()实现。星号运算符有两种形式单星号(*)和双星号(**)。
①单星号(*)将实参列表转换为元组。
def mysum(*data):print(type(data)) # class tupleret 0for x in data:ret xreturn retprint(mysum(1, 2)) # 3
print(mysum(1, 2, 5, 7)) # 15
②双星号(**)将字典转换为关键字参数。
def mysum(**data):print(type(data)) # class dictret 0for key in data:ret data[key]print(key, data[key])return retprint(mysum(a2, b2, c5, d7)) # 这里用等号等号左边为关键字右边为值print(mysum(x2, y3)) # 这里用等号等号左边为关键字右边为值
③同时使用单星号(*)和双星号(**)函数可以接收任意数量的实参并且可以是以上两种类型。
def print_args_kwargs(*args, **kwargs):print(args)print(kwargs)print_args_kwargs(1, 2, 3, a1, b2, c3)
# 输出: (1, 2, 3) {a: 1, b: 2, c: 3}
11.函数地址与函数接口
函数的本质是一个地址可函数名赋值来实现相同功能
def myadd(num1, num2):return num1 num2print(id(myadd)) # 2363817237224
print(type(myadd)) # class functiongo myadd # 注意软件规范不允许这样赋值不然容易出问题
print(id(go), id(myadd)) # id 会相同
print(type(go), type(myadd)) # 类型都是函数ret go(1, 2)
print(ret) # 3
函数名赋值实现函数的调用和定义的分离实现函数接口搭建框架。
# 函数的定义
def add(x, y):return x y - 1# 函数的定义
def minus(x, y):return x - y 10# 函数调用框架
def work(func_name, num1, num2):value func_name(num1, num2)print(value)for i in range(value):print(hello world)return value 1# 函数调用
work(add, 1, 2)# 函数调用
work(minus, 3, 4)
运行结果
2
hello world
hello world
9
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
12.内置函数修改与函数包装
修改内置函数
import osdef myprint(mystr):os.system(echo ---------------)if mystr.find(python is handsome.) ! -1:os.system(echo mystr)else:os.system(echo python is handsome!)os.system(echo mystr)print myprint # 切换函数的地址
print(hello world)
print(Full love leads to madness)
运行结果
---------------
python is handsome!
hello world
---------------
python is handsome!
Full love leads to madness 函数包装 加密 or 保护费 还可以给函数的使用加密 每次调用都要输入密码才行
示例代码
import os# 备份原来的函数地址
backossystem os.system# 等价的调用
# backossystem(notepad)# 需要收费的系统
def system_check(mystr):if mystr.find(A) ! -1:backossystem(mystr)else:print(请开通会员否则 mystr 无法执行)# 修改内置函数地址
os.system system_check
os.system(echo hello world)
运行结果
请开通会员否则 echo hello world 无法执行 end