函数基础1

定义函数
解决的问题: 代码冗余,修改困难
可读性差,扩展性差
1内置函数 :print() sum() max()
2自定义函数:def 函数名(arg1,arg2,arg3):
'描述信息'
函数体
return 1#任意数据类型
*********************先定义,后使用**************

1无参函数 不依赖外部参数 的简单打印语句的函数
不需要返回值

print(foo.__doc__) 显示函数描述信息

2有参函数 依赖外部参数 经过一系列计算 通常需要有返回值

3空函数 作用:框架立见

函数的调用:
空函数:语句形式 foo()
有参函数:表达式形式 res = foo(1,2) #函数运行结束后返回值看不到,必须将函数的返回值赋给一个变量,再打印出来

*****************函数的返回值可以是任意类型****************
不写return 返回None
return 多个数据类型 返回元组形式
return 1 返回1

字符串解压###########a,b,c,d,e = 'hello' a,_,_,_,e = [1,2,3,4,5] a,*_ = 'bhjdsklfhdskflhsjkfhjk'
元组 字典:(key) 集合 都可以解压

弱类型 :不用事先定义参数和参数类型,但是使用参数时类型错误会报错

参数:形参 在函数定义阶段,括号内定义的参数
实参 在函数调用阶段,括号内定义的参数 不要调用外部的环境变量 可变的数据类型

*args 按位置传值时,多出来的实参保存在* 以元组的形式赋给args
**kwargs 按关键字赋值时,把多余的值保存在** 以字典的形式赋给kwargs

在实参的角度
规则:按位置传值必须在按关键字传值的前面
对一个形参只能赋值一次
1.按照位置传值
2.按照关键字传值
3.混着用
在形参的角度
规则:默认参数必须放到位置参数的后面
1.位置参数
2.默认参数
3.*args (接收位置传值)
4.**kwargs(接收关键字传值)
列:
def my_max(x,y):
'求最大值'
res = x if x>y else y
res1 = my_max(3,5)
print(res1) # 打印函数的运行结果,即return 的值
print(my_max(5,8))

a =open('函数笔记',encoding = 'utf8')
head,*_,tail = a # 将文件内容解压,取首尾值,*_ 代表中间多个字符串
print(head,tail)
#空函数
def foo():
pass
#利用函数改变外部全局变量的值 尽量不要那么做 ,不推荐
x = []
def register(name,name_list=x):
name_list.append(name)
res=register('ASB')
print(res) # 打印函数的返回值None
print(x)
register('fff')
print(x)
#实参和形参的练习
def foo(x,*args,y=1,**kwargs):
print(x)
print(y)
print(args)
print(kwargs)

foo(1,2)
foo(x=1,y=2)
foo(y=2,x=2)
foo(1,y=2)
foo(1,2,3,4,y=9,a=2,b=4,c=8)
默认参数
x = 'male'
def register(sex = x):
print(sex)
register()

def bar(x,y,z):
print(x)
print(y)
print(z)
bar(*(1,2,3)) #将元组打散分别用来赋值

def auth(name,passwd,sex='male'):
print(name)
print(passwd)
print(sex)
def foo(*args,**kwargs): #args=('egon',123,'famale') kwargs={}
print('from foo')
auth(*args,**kwargs) #*('egon',123) **{}
foo('egon',123,'famale')
foo(name='egon',passwd=123)


原文地址:https://www.cnblogs.com/liuguniang/p/6681489.html