目录
print("---------函数的定义---------")
'''
def function_name([parameterlist]):
function body
return value
@function_name函数名:命名规则以字母或下划线开头,后面接数字、字母、下划线,函数名区分大小写
@parameterlist函数参数:用于指定向函数中传递的参数
@function body函数内容:指定函数体,即该函数被调用后要执行的功能代码
@return value 函数的返回值:即函数执行完成后返回的值,可以不返回任何内容,不返回内容可视为返回"None"
'''
def language(name):
print("Hello",name)
language("Python")
def greet_user():
print("Hello World!")
greet_user()
print("---------函数参数----------")
#形参,实参
def demo(a):
print("原值:",a)
a+=a
print("----值传递---:")
x=1
print("函数调用前:",x)
demo(x)
print("函数调用后:",x) #值传递时,改变形参值时实参值不改变
print("----引用传递----:")
y=[1,2,3,4,5,6,7,8,9]
print("函数调用前:",y)
demo(y)
print("函数调用后:",y) #引用传递,改变形参值时实参值也改变
#位置参数
#调用函数时,参数的数量必须和定义一致
def add(a,b):
print("a+b=",a+b)
add(1,2)
#调用函数时,参数的位置必须和定义一致
def describe_pet(animal_type,pet_name):
print(f"I have a {animal_type}.")
print(f"my {animal_type}'s name is {pet_name}.")
describe_pet("rabbit","harry")
print("---------")
#关键字参数:使用形参的名来确认输入的参数值
def person(name,age):
print("姓名:",name)
print("年龄:",age)
person(name="小红",age=15)
person(age=12,name="小明") #不能传入未定义的形参
#为参数设置默认值
def default_value(name,height=185):
print("我的名字是:",name)
print("我的身高是:",height,"厘米")
default_value("小明")
def default_value(name,wight,height=185): #非默认参数必须在默认参数的前面
print("我的名字是:",name)
print("我的身高是:",height,"厘米")
print("我的体重是:",wight)
default_value("小明",wight=60)
#可变参数
#*parameter形式表示接收任意多个实际参数并将其放在一个元组中
def f_demo(*animals):
print("我喜欢的动物有:",animals)
f_demo("dog","cat")
f_demo("dog","cat","hamster")
#**parameter形式表示接收任意多个类似关键字参数一样的显式赋值的实际参数,并将其放到一个字典中
def f_demo(**animals):
print(animals)
f_demo(name="dog")
f_demo(name="cat")
#使用*和**来声明参数,解决未知问题
def calculate_sum(*number,**message):
s=0
for i in number:
s+=i
print("输入的数字之和是:",s)
for k,v in message.items():
print(k,v)
calculate_sum(1,2,3,4,5,6,绩效="六月")
def exp(*args,**kwargs):
print(args)
print(kwargs)
x=[1,2,3,4,5]
y={"参数1":"arg1","参数2":"arg2"}
exp(*x,**y)
print("-------函数返回值---------")
#函数返回值
def f_demo():
x="hello"
return x
result=f_demo()
print(result)
#不写return或者只有return后面无变量,则返回"None"
def no_return():
print("没有return")
result=no_return()
print(result)
print("-----------")
def no_return_value():
print("有return没有返回值")
return
result2=no_return_value()
print(result2)
print("----------------")
def has_return():
x="hello"
print("有return有返回值")
return x
result3=has_return()
print(result3)
#多个返回值,以元组形式返回
def multi_value():
x1=1
x2=2
x3=3
x4=4
x5=5
return x1,x2,x3,x4,x5
x=multi_value()
print(x)
#将返回值赋值给多个变量
def three_value():
return 1,2,3
x1,x2,x3=three_value()
print(x1)
print(x2)
print(x3)
#函数返回字典
def build_person(first_name,last_name):
person={"first":first_name,"last":last_name}
return person
poet=build_person("William","Shakespeare")
print(poet)
print("--------变量作用域---------")
#局部变量
def f_demo():
a="hello"
print(a) #a是在函数内部打印,函数内部赋值a,只能在函数内部访问
f_demo()
def f_demo(a):
print(a) #a是在函数定义的参数,也只能在函数内部访问
f_demo("hello")
#全局变量
print("-------")
a="hello"
def f_demo():
print(a)
f_demo()
print(a) #全局变量即在函数体外定义的变量,在函数体内外都可以访问
#函数体内的局部变量不影响函数体外的全局变量
x="函数体外"
def f_demo():
x="函数体内"
print(x)
f_demo()
print(x)
#global将局部变量修改成全局变量,global修饰的变量在函数体内外可以访问
print("---------")
x="函数体外"
print(x)
def f_demo():
global x
x="函数体内"
print(x)
f_demo()
print(x)
print("----------函数递归和代码复用----------")
#函数递归
def factorial_fun(n):
if n==1:
return 1
return n*factorial_fun(n-1)
num=int(input("请输入一个正整数:"))
print("该数的阶乘为: ",factorial_fun(num))
"""代码复用
指同意份代码在需要时可以被重复使用,函数和对象是代码复用的主要形式。
好处是更新函数功能时,所有的被调用功能都被更新。
用函数去封装一些特定功能和经常被复用的语句,尽量去减少函数间的参数返回值的数量。
"""
print("-------文档字符串---------")
#函数的第一行可以是字符串,这个字符串就是文档字符串,用__doc__来获取
def add(a,b):
"""返回参数a和b的和
----------------------------------
parameters
a:int,第一个参数
b:int,第二个参数
----------------------------------
returns
int,返回a+b"""
return a+b
print(add(5,9))
print(add.__doc__)
print("----------匿名函数-------")
def add(a,b):
return a+b
#lambda表达式创建匿名函数,一般匿名函数只使用一次
lambda a,b:a+b
"""使用lambda有两种情况:
1.程序只执行一次,不需要定义函数名,使用lambda方便定义,并且节省了内存中变量的定义
2.某些函数中必须将函数作为参数,但是函数本身十分简单且只在一处使用
"""
s=lambda a,b:a+b
c=s(3,5)
print(c)