函数的定义和调用

#函数的定义的格式

#def 函数名(参数[可选]):
#功能代码的实现

#定义函数不会调用
def show():
print("我叫张三丰,年龄18")


#调用函数
#函数名(参数)

#定义带有参数的函数
#name,age:形式参数(函数定义带有的参数叫形式参数)形参
def show_msg(name,age):
print(name,age)

#调用带有参数的函数"张三",20:实际参数(实参)
show_msg("张三",20)

函数的四种类型

#无参数无返回值得函数
def show():
#函数'体里面的代码执行完毕,返回到函数的调用出
print("大家好,今天天气可冷了")

#函数调用
show()

#无参数有返回值的函数
def show():
result = 10
#带着数据返回到代码的调用处
return result

value = show()
print(value)
#有参数无返回值的
def show(name,age):
print("我叫:%s 年龄:%d" %(name,age))
show("张三",19)

#有参数有返回值的
def show_msg(name,age):
msg = "我叫:%s 年龄:%d" %(name,age)
return msg

result = show_msg("李四",40)
print(result)

调用顺序

#定义函数是不会执行函数体里面的代码
def shwo():
print("哈哈")

print("呵呵")

shwo()
print("lll")
#总结:函数调用的时候会返回到函数的定义处,执行函数体里面的代码
#执行完毕,返回的调用处

全局变量

#全局变量:在函数外定义的变量叫做全局变量
#特点:全局变量可以在不同的函数里面使用
score = 100

def show():
#定义了一个局部变量,只不过这个局部变量和全局变量的名字一样
# score =99
#修改全局变量
global score#表示要对全局变量score修改数据
score = 99
print(score)


show()
print(score)

函数传参方式:

#调用函数的传参方式:1.使用位置传参2.使用关键字传参

def show(name,age):
print(name,age)
print("架架")
#使用位置参数方式传参:必修按照函数的参数顺序去传参
show("张三",18)
#positional argument:丢失了一个位置参数

#使用关键字方式传参
#使用关键字传参,可以不按照函数参数的顺序去传参
show(age=19,name="李四")
#前面使用关键字传参,后面使用位置传参(不可以的)
# show(age=19,"张三")
#前面使用位置传参,后面使用关键字传参可以使用
#关键字传参,必须放在最后
show("冯七",age=10)

不定长参数:

#函数的不定长参数:1.不定长位置参数2,不定长关键字参数

#不定参数:调用函数的时候不确定传入多少个参数
#可能是0个或者多个

#--------------不定长位置参数的定义及调用--------------
#*args代表不定长位置参数,约定俗称起的名字
def sum_num(*args):
#提示:args:会把调用函数传入的位置参数封装到一个元组里面
print(args,type(args))

#计算结果变量
result = 0
for value in args:

result += value
return result


result = sum_num(1,2,3,4,6,8)
print(result)
# sum_num(a=1,b=2)

#------------不定长关键字子参数函数的定义及调用-------
#**kwargs 代表不定位置参数
def show_msg(**kwargs):

print(kwargs,type(kwargs))

for key,value in kwargs.items():

print(key,value)

#调用不定长位置参数的函数
show_msg(a=1,b=2)
#使用位置参数的方式调用不定长关键字参数的函数
# show_msg(1,2)

# def pachong():
# #1.232323
# data = "asdasd"
# return data
#
#
# data = pachong()
# print(data)
#爬虫:只能抓取用户有权限能看见的数据

不定长位置参数的使用

#定义不定长位置参数
def show_msg(*args):
#(1,2)
print(args)

#定义不定长位置参数

def show(*args):
# print(args,type(args))
# (1,2)
print(args)
#解决办法:对元组进行拆包
show_msg(*args)

# show_msg(args)

show(1,2)

函数的参数的高级使用

def show_msg(name,age,*args,**kwargs):
print(name,age,args,kwargs)

#不能使用下列方式调用,因为前面使用了关键字传参,后面不能使用位置传参
# shwo(name="李四",age=18,1,4,c=1,b=2)
# shwo("李四",20,1,2,3,4,a="苹果",b="香蕉")
#可不可以
def show(*args,name,age,**kwargs):
print(args,name,age,kwargs)
#kwargs必须放置在后面(不定长关键字参数放置在后面)
show(1,2,name="李四",age=12,aa=1,bb=2)


#注意点:*后面的参数,必须使用关键字传参方式
def callAble(address,sex,*,name,age):
print(address,sex,name,age)

#使用位置传参的方式调用函数
callAble("上海","男",name ="刘彦",age=20)

不定长关键字函数的使用

def show_msg(**kwargs):
print(kwargs)


#定义不定长关键字函数
def show(**kwargs):
print(kwargs)
#使用了位置传参的方式调用函数
# show_msg(a=kwargs)
# 对字典进行拆包
show_msg(**kwargs)


show(a=1,b=2)