Python系列-函数

目录

函数的定义

函数参数

形参,实参

位置参数

关键字参数

为参数设置默认值

可变参数

函数返回值

多个返回值,以元组形式返回

将返回值赋值给多个变量

函数返回字典

变量作用域

局部变量

全局变量

函数体内的局部变量不影响函数体外的全局变量

global将局部变量修改成全局变量

函数递归和代码复用

函数递归

文档字符串

匿名函数

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)




























  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值