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()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑泽君的专栏

JDK5中Lock锁的使用

(1)JDK5中Lock锁的使用   虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的...

971
来自专栏领域驱动设计DDD实战进阶

04-TypeScript中的方法新功能(上)

在TypeScript中,提供了一些函数的新功能,能够简化JavaScript中的一些比较复杂代码才能实现的一些能力。 在C#后端语言中,能够对方法传递的参数指...

2794
来自专栏大闲人柴毛毛

Java基础深入解析——类与对象

成员变量与局部变量的区别 1.成员变量定义在类中,整个类中都能够访问。   局部变量定义在局部代码块中,只能在局部代码块中访问。 2.成员变量存在于堆内存中,有...

3307
来自专栏java小白

LinkedHashMap的accessOrder

1939
来自专栏http://www.cnblogs.com

python 反射

通过字符串映射或修改程序运行时的状态、属性、方法, 有以下4个方法: hasattr(obj,name_str) 判断一个对象obj里是否有对应的name...

3779
来自专栏史上最简单的Spring Cloud教程

Java 代理模式

什么是代理 代理是一种设计模式,它的核心思想,是将对目标的访问转移到代理对象上。这样做的好处就是,目标对象在不改变代码的情况下,可以通过代理对象加一些额外的功能...

2148
来自专栏决胜机器学习

《Redis设计与实现》读书笔记(五) ——Redis中的整数集合

《Redis设计与实现》读书笔记(五) ——Redis中的整数集合 (原创内容,转载请注明来源,谢谢) 一、概述 整数集合(intset)是redis数据结构集...

3434
来自专栏HTML5学堂

PHP入门-常量基本规则

PHP入门-常量基本规则 HTML5学堂:本文是PHP的入门用文章,主要介绍PHP的常量的基本规则以及定义和获取方法。 前几天把PHP的基本语法以及变量的基本规...

37515
来自专栏风中追风

try,finally中都有return时程序的执行顺序

 在Java中当try、finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家各有各的说法,刚好今天有个朋友问了...

36915
来自专栏流媒体

C++ string

852

扫码关注云+社区

领取腾讯云代金券