2018-7-18pythoh中函数的参数,返回值,变量,和递归

************************************************************************************
                                 函数中的参数的初级和返回值:
技术文档中[]方括号里面的东西表示可选的
参数:函数运行需要的数据   如果没有参数会提示:missing 1 required positional,

函数的两个要点,参数和返回值:
1.如果函数有参数在调用执行函数的时候要把参数写里面,如;

def show_info(name):                #括号里面的参数是形参:形参可以写多参
      print(“用户为:%s”%name)
show_info("李易峰"):               #括号里面是实参:如果形参有多个传递实参时也必须要写多个数据,多写
                                                     少些都不对


2.如果参数有返回值,需要用返回值时要定义一个变量接收返回值,如果不接收的话返回值不会打印出来,如:
def check():
   print("表演人:")
   name="songanhua "
   return name

a=check()                #变量a用于接收函数的返回值
print("检查到的人是%s"%a)


执行到return时函数就自动结束
************************************************************************************
                                 函数的参数由基础到进阶:
基础:
args:arguments  参数
kwargs:keyward arguments  关键字参数

形参中前面加*是指可变参数类型,实参中前面加*是解包参数

函数的参数一共有7种类型分别是:位置参数,关键字参数,默认值参数(p1,p2,oper="+"),强制关键字参数(*,p1,p2),
可变的:可变参数(*args),可变关键字参数(**kwargs),万能参数(*args,**kwargs)

1.位置参数 ,按照形参的顺序依次对照赋值
# def test1(p1,p2,p3,p4):
#     print(p1,p2,p3,p4)
#
# test1(10,20,30,40)


# #2.关键字参数,提高了代码的可读性,现在开发大多用这种方法
# def test2(p1,p2,p3,p4):
#     print(p1,p2,p3,p4)
#
# test2(p1=10,p2=20,p3=30,p4=40)


#3.默认值参数,默认参数值一般放在最后,放在普通参数值的后边
# def test3(n1,n2,opera="+"):
#     print("该运算n1[%s]opera[%s]n2[%s]"%(n1,opera,n2))
# test3(1,2)
# test3(1,2,"/")

#4.强制关键字参数    *星号后边的参数必须强制使用关键字参数,没有限制得可以用位置参数,
# 如果*号在最前面,则所有的参数都限制必须要用关键字参数
def test4(p1,*,p2,p3,p4):
    print(p1,p2,p3,p4)

test4(10,p2=20,p3=30,p4=40)

进阶:

参数又可分为:可变参数,可变关键字参数,万能参数
在形参前面如果加一个*是指可变参数,
在形参前面加两个*指的是可变的关键字参数
在实参列表前面加一个*是指解包列表,在实参字典前加两个*是指解包字典


#1.可变参数:在普通形参前面加一个*则变成可变参数,可以接收0-N个参数,以元组的形式展示出来
# def test(*args):
#     print(args)
#
# test("enen")
# test(1,2,3,4)
# test("武军超","是的","嗯呢",1)


#2.可变关键字参数::就是在普通形数前面加上**该形参就变成了可变的关键字参数,
# 可以接收多个K=v数据,并自动将数据以字典的形式展示出来
# def test1(**kwargs):
#     print(kwargs, kwargs.get("name"))
#
# test1(name="tom")
# test1(name="jerry",age=18)
# test1(name="wujunchao",age=18,gender="男")


#3.万能形参数:在满足规范的前提下可以接收任何参数,下列的普通参数和关键字参数顺序不能反
def test2(*args,**kwargs):
    print(args,kwargs)

test2()
test2("wu")
test2(name="jerry")
test2("wujunchao",name="tom")
test2(1,2,3,"shide",name="jerry",age=18)

解包:
如果参数提供的数据是列表,元组,集合,字典这些组合数据类型,则无法直接上传,这时需要解包
实参列表名字前面添加一个*表示将列表,元组,集合解包拆分成一个一个独立的数据传递
实参字典名字前添加两个*便是将字典解包,以k-v的形式上传

*和**在形参前面表示可变参数,放在实参前面表示解包

#解包:意思是组合数据类型的拆分

def test(p1, p2):
    print(p1, p2)

#正常调用
test(10, 20)

#非正常调用,列表需要解包,解包成一个一个数据上传
num = [10, 20]
test(*num)         # test(*nums) -> test(10, 20)

#非正常调用,字典解包
num2 = {"p1": 10, "p2": 20}
test(**num2)          # test(**nums2)-> test(p1=100, p2=200)

****************************************************************************************
                                            函数中的变量:
variable  变量
函数中的变量分全局变量和局部变量,函数外的为全局变量,函数内的为局部变量

在函数中如果需要修改全局变量的值,需要先用global+name声明一下全局变量放在定义的函数顶部,
然后name=""重新赋值,实例如下:

 name="jerry"     #在函数外部定义的全局变量
 def test():
     global name
     global msg
     print("函数内部查询全局变量未修改前的:",name)
     age=18
     print("局部变量",age)
     name="tom"             #修改原来全局变量的值
     msg="留言"

 test()
 print("修改后的全局变量:",name)  #tom
 print("新定义的全局变量:",msg)   #留言


函数自己调用自己就是函数的递归,函数递归比循环消耗内存

在函数中尽量定义局部变量

开发一个项目一般把项目分成三个部分,分别是:
data.py(存放数据的文件)
tools.py(存放函数的文件)
main.py(存放函数执行的文件)

***************************************************************************************

                                      函数的互相调用和递归:
定义一个函数表示 一个行为
#在一个函数中可以调用另一个函数,叫做函数的相互调用
#在函数也可以调用自己叫做函数的递归

#第一种:两个行为是相互独立的
# def movie():
#     print("看电影")
#
# def snack():
#     print("吃零食")

#两个函数单独执行
# movie()
# snack()


#第二种:在函数中调用另一个函数,为什么snack函数定义在后边但是在前面直接引用了并没有报错?
# 是因为定义函数并没有执行函数,而是把函数中的代码先存在内存中,当movie函数被调用的时候,
#snack函数已经在内存中了
# def movie():
#     print("看电影")
#     snack()
#admiad
# def snack():
#     print("吃零食")
#
# movie()


#函数的递归就是函数中调用执行自己,简单的函数递归实例:
def login():
    username=input("请输入登陆账号:")
    if username=="admin":
        print("登陆成功")
        return username
    login()                     #可以直接写login(),也可以写一个else再写login()


login()
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值