1.形参的调用方式

1. 位置参数调用

2. 关键词参数调用

原则: 关键词参数调用不能写在位置参数调用的前边

def test1(name, age):print("name:", name)print("age:", age)if "__main__" == __name__:test1("admin_maxin", age=23)  # righttest1(name = "admin_maxin", 23)  # error

2.不定长参数

1. 加了*的参数会以元组(tuple)形式导入,存放所有未命名的变量参数(位置参数)

2. 加了**的参数会以字典的形式导入(关键字参数)

3. **的参数不能出现在*的参数的前边

4. *可以单独出现,*后的参数必须通过关键字调用

def test2_1(name, age=18, *args):print(name, age)print(type(args))print(args)def test2_2(**kwargs):print(type(kwargs))print(kwargs)def test3_3(name, *, age=18):  print(name, age)if "__main__" == __name__:test2_1("mx", 20, 1, 2, 3, 4)test2_2(name="mx", age=23)test3_3("mx", age=23)OUTPUT:
--> mx 20<class 'tuple'>(1, 2, 3, 4, 5)
--> <class 'dict'>{'name': 'mx', 'age': 23}
--> mx 23

3.函数的返回值

1. 返回值数等于0,返回NULL

2. 返回值数等于1,返回object

3. 返回值数>1,返回tuple

def test3_1(name="mx", age=23):    print(name, age)def test3_2(name="mx", age=23):   return namedef test3_3(name="mx", age=23):return name, ageif "__main__" == __name__:print(type(test2_1()))print(type(test2_2()))print(type(test2_3()))OUTPUT:
<class 'NoneType'>
<class 'str'>
<class 'tuple'>

4.变量作用域

python3中变量作用域一共有4种:

1. L(local)局部作用域

2. Enclosing闭包函数外的函数中

3. G(global)全局作用域

4. B(Built - in)内建作用域

变量查找规则:局部找不到便会去局部外的局部查找(例如闭包),再找不到就会去全局找,再者去内建中查找。

x = int(2.9)         # 内建作用域
g_count = 0          # 全局作用域def outer():o_count = 1      # 闭包函数外的函数中x = 3def inner():     # 闭包函数i_count = 2  # 局部作用域print(x)inner()if "__main__" == __name__:outer()OUTPUT:
--> 3

5.匿名函数(lambda)

1. lambda 只是一个表达式,函数体比 def 简单很多

2. lambda主体是一个表达式,而不是代码块。仅能在lambda表达式中封装有限的逻辑进去。

3. lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

4. 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

注意:匿名函数同样支持默认值参数

y = lambda x=2: x**2if "__main__" == __name__:print(y())print(y(3))OUTPUT:
--> 4
--> 9

6.函数递归调用

1. 必须有一个明确的结束条件

2. 每进入更深一层次的递归,问题的规模相比于上一次递归都应该有所减少

3. 递归的效率不高,层次过多会造成栈溢出(函数的调用是通过栈(stack)这种数据类型来完成的,由于栈的大小不是无限的,所以递归调用的次数过多会导致栈溢出。)

注意:python中最大递归深度为999

7.函数式编程

函数式编程语言是一种抽象程度非常高的编程范式,纯粹的函数编程语言编写的函数没有变量。因此任何一个函数只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入可能得到不同的输出,因此,这种函数是有副作用的。函数式编程的一个特点就是,允许将函数本身作为参数传入另一个函数,还允许返回一个函数。python对函数式编程提供了部分支持,由于python允许使用变量,因此,python不是纯函数式编程语言

注意: 完全函数式编程热门语言:lisp, haskell, erlang等

# (1+2)*3-4
var result = subtract(multiply(add(1, 2) + 3) - 4)

8. 高阶函数

函数接收另外一个函数作为参数,这种函数称之为高阶函数

9.global和nonlocal关键字

当内部作用域想要修改外部作用域的变量时,则会用到这两个关键字。

1. global: 修改全局变量

2. nonlocal: 修改局部外的局部中的变量

num = 1def test9_1():global numprint(num)num = 123print(num)if "__main__" == __name__:test9_1()print("查看全局变量是否发生变化:", num)
def outer():num = 1def inner():nonlocal num   # nonlocal关键字声明num = 123print(num)inner()print("查看局部外的局部当中的变量是否发生变化:", num)if "__main__" == __name__:outer()

10.内置函数

https://blog.csdn.net/admin_maxin/article/details/81806081

python3_函数_形参调用方式 / 不定长参数 / 函数返回值 / 变量作用域 / 匿名函数 / 递归调用 / 函数式编程 / 高阶函数 / gobal和nonlocal关键字 / 内置函数相关推荐

  1. c语言不定长参数函数,DEFUN 如何定义支持不定长参数的函数

    当前位置:我的异常网» C语言 » DEFUN 如何定义支持不定长参数的函数 DEFUN 如何定义支持不定长参数的函数 www.myexceptions.net  网友分享于:2015-07-15   ...

  2. C#调用存储过程带输出参数或返回值分类(转)

    C#调用存储过程带输出参数或返回值 分类: Asp.net MSSQL2014-05-26 14:02 330人阅读 评论(0) 收藏 举报 [csharp] view plaincopyprint? ...

  3. python学习——函数式编程——高阶函数

    python学习--函数式编程--高阶函数 函数式编程(高阶函数):1:map && reduce; 2 : filter; 3: sorted; ------------------ ...

  4. 【一天时间|JavaScript进阶】函数式编程高阶函数的应用

    一天时间系列文章是博主精心整理的面试热点问题和难点问题,吸收了大量的技术博客与面试文章,总结多年的面试经历,带你快速并高效地审视前端面试知识.直击技术痛点,主动出击,精密打击,这才是面试拿到高薪的秘诀 ...

  5. Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊...

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  6. php+方法返回多个参数,PHP中调用外部程序,及其参数与返回值

    用了一下午,终于弄明白了如何在PHP代码中调用外部程序. 在PHP中调用外部程序主要有两个函数,system和exec. system的原型为string system(string command ...

  7. 函数式编程 --- 高阶函数

    含义: 高阶函数全称 (Higher-order function) 1.可以把函数作为参数传递给另一个函数 2.可以把函数作为另一个函数的返回结果 意义:高阶函数是用来抽象通用的问题:抽象可以帮我们 ...

  8. 淘宝按关键字搜索淘宝商品 API 参数及返回值说明 翻页展示 含调用示例

    淘宝关键字搜索接口,是复原我们在淘宝购物时,在搜索栏内输入关键字,即可获取到相关商品列表,商品信息齐全,支持翻页展示.同时,传入参数sort可按价格排序,也可筛选响应价格段的商品.商品信息是千人千面的 ...

  9. Android调用远程Service的参数和返回值都需要实现Parcelable接口

    import android.os.Parcel; import android.os.Parcelable; public class Person implements Parcelable{ p ...

最新文章

  1. 全球智能驾驶产业全景图
  2. StackOverFlow上你没看过的7个Java最佳答案
  3. 自然语言处理之循环神经网络(五)
  4. SQLServer 查看耗时较多的SQL语句
  5. HMAC算法及其应用
  6. Oracle11.2.0.4 RAC安装文档
  7. 视觉智能产品发布 阿里云这项世界第一的技术现在人人可用
  8. r语言编程基础_这项免费的统计编程课程仅需2个小时即可学习R编程语言基础知识
  9. 判断一个字符串大写小写,和数字出现的次数
  10. Github上的热门iOS开源项目:AFNetworking、MagicalRecord、BlocksKit以及XVim
  11. 黑马程序员-java-高新技术中《九》
  12. 海南关于推荐扬尘监控系统的通知_实时监管!定州对44家混凝土搅拌企业实施远程视频监控...
  13. web.config中特殊字符的处理
  14. 《刻意练习》学习总结
  15. [转] 测度论简介------一个通往异世界的大门
  16. 2022全球「高被引科学家」榜单出炉!中国内地1169人入选,继续紧追美国
  17. 13 岁女孩因发布JavaScript被捕,写个死循环你就进去了?
  18. 孙空空的Vue之路-Day07-事件处理
  19. tomcat源码解读(一)
  20. 研究了3天,终于将 Shader 移植到 Cocos Creator 2.2.0 上了

热门文章

  1. 融云--快速集成融云
  2. Java远程屏幕监控案例
  3. 测试固态参数的软件,BT测试告诉你 SSD 那些性能参数最重要
  4. 嵌入式应用软件架构设计
  5. 初学,用python获取B站视频
  6. ClickHouse 实践
  7. 推荐系统入门(六):新闻推荐实践1(附代码)
  8. 武大计算机专业薪酬,2018大学毕业生薪酬排行榜公布:武大输给华科,更意想不到的高校是它...
  9. SAP 薪酬计算流程
  10. html5简单幻灯片图片转换,用纯CSS实现简单的相册幻灯片