学习心得_函数和函数功能

函数

无参函数

如果函数体代码逻辑不需要依赖外部传入的值,必须定义成无参函数

def func():
    print("hello nick")
    
func() #hello nick

有参函数

如果函数体代码逻辑需要传入值,必须定义成有参函数

def sum_self(x,y):
    return x+y
print(sum_self(4,8))

空函数

只知道功能但是不知道代码的时候,可以暂时写一个空函数

def func():
    pass

函数的返回值

# 返回值的特征

1. return 是一个函数的结束标志,函数内可以有多个return,只要执行到了return,函数就会自动停止
  1. return 返回值可以返回任意数据类型
  2. return 返回值无个数限制,可以用逗号隔开多个返回值
    1. 0个:返回None
    2. 1个:返回该值本身
    3. 多个:返回一个元组
def func():
    name ='nick'
    age =19
    hobby_list=['read','run']
    return name,age ,hobby_list

get_re = func()
name,age,hobbies = get_re
print(F"name {name},age {age},hobbies {hobbies} ,,{type(get_re)}")
#name nick,age 19,hobbies ['read', 'run'] ,,<class 'tuple'>

函数的调用

def foo():
    pas
 print(foo())

函数调用的三种方式

def max_self(x,y):
    if x>y:
        return x
    else:
        return y
#1
max_self(1,2)
#2
max_self(1,2)*12
#3
max_self(max_self(20000,30000),40000)

形参和实参

形参

在函数定义阶段括号内定义的参数,称之为形式参数,本质就是变量名.

def func(x,y):
    print(x)
    print(y)

实参

在函数调用阶段给括号内传入的参数,本质就是变量值

func(1,2)

位置形参和位置实参

定义阶段,按照从左到右顺序定义的形参,叫做位置形参

调用阶段,按照从左到右的顺序依次定义的实参,叫位置实参

关键字实参

在函数调用时,按照key=value的形式为参数传值,称之为关键字实参

func(y=1,x=2)
  1. 可以混用位置实参和关键字实参,但是位置实参必须在关键字实参的左边。
  2. 可以混用位置实参和关键字实参,但不能对一个形参重复赋值。

默认形参

在定义阶段,就为一个参数给默认值,调用的时候可以不赋值

def func(x,y=10)
    pass
func(2)

默认参数的值通常应该是不可变类型

当传递可变类型时,传递的是可变类型的地址,只要更改就会更改外部的数据

def register(name,hobby,hobby_list=[]):
    hobby_list.append(hobby)
    print(f"{name} prefer {hobby_list}") 
    
register("nick",'piao') #nick prefer ['piao']
register("tank",'run') #tank prefer ['piao', 'run']

tank没有piao的爱好,但是因为是可变类型,在地址不变的情况下值是可变的,所以也修改了别人的hobby_list

#用上才学习的deepcopy
import copy
def register(name,hobby,hobby_list=[]):
    tmp_list= copy.deepcopy(hobby_list)
    tmp_list.append(hobby)
    print(F"{name} perfer {tmp_list}")
register('nick','piao',['read','run']) #nick perfer ['read', 'run', 'piao']
register('tank','zuipao') #tank perfer ['zuipao']

变长参数

可变长形参 *

形参中的将会把溢出位置的参数全部接收,然后存储为元组的形式.然后把元组赋值给后面的参数.

需要注意的是 *后面的参数约定俗称 args

def sum_self (*args):
    res = int()
    for num in args:
        res += num
    return res
print(sum_self(1,2,3,4,5,6)) #21

可变长实参 *

实参中的会把后面的参数循环取出,变成位置实参

def func(x,y,z,*args):
    print(x,y,z,args)
func(1,*(2,3)4,5) #1 2 3 (4, 5)

可变长形参 **

形参中的*会把溢出的关键字实参全部接收.存储为一个字典的形式,之后吧字典赋值给 *,**后面的参数名约定俗成kwargs

def func(**kwargs):
    print(kwargs)
print(a=5) #{'a':5}

可变长实参**

实参中的** 会把** 后的参数的值循环取出.打散成关键字实参.

def ind (a,b,c,**kwargs):
    print(a,b,c,kwargs)
ind(1,2,3,d=1,f=7,**{'g':9,'h':10}

应用

def index(name, age, sex):
    print(f"name: {name}, age: {age}, sex: {sex}")

def wrapper(*args, **kwargs):
    print(f"args: {args}")
    print(f"kwargs: {kwargs}")
    index(*args, **kwargs)

wrapper(name='nick', sex='male', age=19)

命名关键字形参

def register(**kwargs):
    if 'name'not in kwargs or 'age' not in kwargs:
        print('用户名和年龄必须使用关键字形式传值!')
        return
    print(kwargs['name'])
    print(kwargs['age'])
    
register(name='wuqiyu',age='23')

录入男同学爱好

def hobbies(*args, **kwargs):
    for i in args:
        for k,v in kwargs.items():
            print(f"{i}同学喜欢{k}盘里的{v}")
hobbies('nick','tank',D='学习资料',E="教育视频")
"""
nick同学喜欢D盘里的学习资料
nick同学喜欢E盘里的教育视频
tank同学喜欢D盘里的学习资料
tank同学喜欢E盘里的教育视频
"""

转载于:https://www.cnblogs.com/blog5434/p/10946097.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值