一、面向对象:将客观世界的事物抽象成计算机中的数据结构

类:用class定义,这是当前编程的重点范式,以后会单独介绍。 二、函数编程:逻辑结构化和过程化的一种编程方法

1、函数-->用def定义
2、好处:
a、重用逻辑
b、保持一致性:改一个地方,其他调用的地方都会改
c、可扩展性
注意:可复用的逻辑一定要用函数写
3、函数的返回值:
a、返回多个值,Python会将多个值装到元组中返回
b、返回1个值,则返回一个object
c、无返回值,则Python默认返回None 三、函数的参数:

  1、实参:即实际参数,是在调用时传递给函数的参数,必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。      
  2、形参:即形式参数,形参是函数被调用时用于接收实参值的变量。
  3、位置参数,与形参的位置一对一对应,比如:test(4,5)
  4、关键字参数,无需位置一对一对应,比如:test(x,y),调用的时候也可以写成test(y=5,x=4),因为有指定关键词,所以无需按顺序写
  5、位置和关键词调用混合时:关键词参数不能写在位置参数前面,比如:
    def test(x, y, z):
    print("%d %d %d" % (x, y, z))
    x = 1
    y = 2
    z = 3
    test(x, y, z) # 按位置赋值
    test(1, 2, 3) # 按位置赋值
    test(3, z=6, y=2) # 按关键词赋值
    test(1, y=2, z=3) # 如果写成test(1, y=2,3) 直接就报错了,关键词参数不能写在位置参数前面 6、默认参数:直接在形参位置赋值,作用是为函数定义一些初始默认值,省去设置麻烦,注意:定义时默认参数不能在位置参数前面
  
  
    def test2(x, y, z=1): # 如果写成 def test2(x,z=1,y )就会报错,默认参数不能在位置参数前面
      pass
  7、*args:将所有位置参数传给函数并转换成元组,不接收关键词参数
8、**args:将所有关键词参数传递给函数并且转换成字典,不接收位置参数     def test2(yy, ii=1, *args, **kwargs):
    print("yy", yy) # yy是位置参数
    print("ii", ii) # ii是默认参数
     print("args", args) # args将接收所有位置参数
    print("kwargs", kwargs) # kwargs接收所有关键词参数     # 位置参数传入,其他参数都可以不传
    test2(100)
    # 关键词参数,可以调换顺序
    test2(ii=100, yy=100)
    # 位置参数先按位置对应传入,(3,4,5,6,7,8将被当成元组处理被args接收)
    test2(1, 2, 3, 4, 5, 6, 7, 8)
    # 位置参数先按位置对应传入,剩下的位置参数被args接受当成元组处理,剩下的关键词参数被kwargs当成字典处理
    test2(1, 2, 3, 4, 5, 6, 7, 8, arg=10, name='tangwei') 四、局部变量和全局变量
  1、局部变量:只在函数内部其作用,修改值不影响函数外面相同变量名的值
  2、全局变量:在整个文件都起作用,如果函数内部要修改其值需要用到global关键字,但最好不要这样做,不然值被哪个方法修改的就不能确定。
  3、就近寻找原则:如果全局和局部变量同名,那么函数内使用局部变量,函数外用全局变量。
  
    name = "chenmeifan"
    hobby = ["computer", 'read', "game"]
    ii = 100     def test(name1, ii1):
    global name
    global ii     name = name1 # 修改全局变量的值
    ii = ii1 # 修改全局变量的值,虽然这个ii与全局变量ii同名,但是依然可以赋值成功
    hobby[0] = "shopping" # 修改全局变量的值
    print("test...1", name, ii)     name = "tangwei"
    print("test...2", test(name, 1000))
    print("test...3", hobby)
 

五、递归函数:调用自己的函数就是递归函数

1、必须要有一个退出条件,不然就死循环,最大递归层数999次
2、效率不高,递归层次太多会导致栈溢出。
3、每次进入更深一层递归时,问题规模相比上次递归都应有所减少。   def test3(n):
  if n <= 0:
return
  n -= 1
  print("n...",n)
  test3(n)
  test3(10)

六、匿名函数:没有给函数取名的函数
  cou = lambda x:x*3
  print(cou(3))

Python学习笔记:函数和变量详解的更多相关文章

  1. Python学习笔记:魔术方法详解

    准备工作 为了确保类是新型类,应该把 _metaclass_=type 入到你的模块的最开始. class NewType(Object): mor_code_here class OldType: ...

  2. Python学习一:序列基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7858473.html 邮箱:moyi@moyib ...

  3. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  4. IP2——IP地址和子网划分学习笔记之《子网掩码详解》

    2018-05-04 16:21:21   在学习掌握了前面的<进制计数><IP地址详解>这两部分知识后,要学习子网划分,首先就要必须知道子网掩码,只有掌握了子网掩码这部分内容 ...

  5. Python学习记录3-函数参数详解

    参数详解 参数分类 普通参数 默认参数 关键字参数 收集参数 普通参数 定义时直接定义变量名 调用的时候直接把变量或者值放入指定位置 def 函数名 (参数1, 参数2, ....): 函数体 # 调 ...

  6. [读书笔记]C#学习笔记三: C#类型详解..

    前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...

  7. C#学习笔记二: C#类型详解

    前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...

  8. 【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析

    这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try { //需要被检测的异常代码 } catch(Exception e) { //异常处 ...

  9. jQuery学习笔记之Ajax用法详解

    这篇文章主要介绍了jQuery学习笔记之Ajax用法,结合实例形式较为详细的分析总结了jQuery中ajax的相关使用技巧,包括ajax请求.载入.处理.传递等,需要的朋友可以参考下 本文实例讲述了j ...

  10. Python学习笔记 - 函数参数

    >>> def power(x): ... return x * x ... >>> power(5) 25 >>> def power(x, n ...

随机推荐

  1. 3DGIS与BIM集成集成技术及铁路桥梁可视化系统

    3DGIS与BIM的集成技术 3DGIS与BIM的集成技术包括2部分:一是将Revit软件生成的BIM针对3DGIS的快速无损格式转换,这种转换包括几何信息(如形状.位置等信息)和属性信息(如建筑信息 ...

  2. 【Vue】---- 手动封装on,emit,off

    一.概念 1. $on("事件名称",回调函数) 事件绑定,一个事件名称上面可能绑定多个函数 2. $emit("事件名称",需要传递的值) 事件触发时,会触发 ...

  3. ES6中的Promise使用总结

    One.什么是Promise? Promise是异步编程的解决方案,而它本身也就是一个构造函数,比传统的异步解决[回调函数]和[事件]更合理,更强大. Two.Promise有何作用? 作用:解决回调 ...

  4. python常用软件包

    redis数据库: 链接:https://pan.baidu.com/s/1X_ndCj0scF2WZd2FPLRKag 提取码:e3zm git安装包: 链接:https://pan.baidu.c ...

  5. 结巴分词demo

    #encoding=utf-8 from __future__ import unicode_literals import sys sys.path.append("../") ...

  6. element UI使用

    1.Button按钮 <el-button type="text">文字按钮</el-button>设置type="text",可以是无 ...

  7. linux相关的帮助文档

    几乎所有linux发行版都会提供大量的有用的文档. 手册页 linux发行版包含了有关常用命令.系统调用和库函数的手册页.手册页被分成不同的章节并分别标以序号: Section      名称     ...

  8. 某些时候 v-if 会导致 v-modal 内部数据获取不到 也watch不到,这个时候用v-show即可,另外提一下数组要整体赋值才有双向绑定

    某些时候 v-if 会导致 v-modal 内部数据获取不到 也watch不到,这个时候用v-show即可,另外提一下数组要整体赋值才有双向绑定

  9. Python基础篇(四)_组合数据类型的基本概念

    Python基础篇——组合数据类型的基本概念 集合类型:元素的集合,元素之间无序 序列类型:是一个元素向量,元素之间存在先后关系,通过序号进行访问,没有排他性,具体包括字符串类型.元组类型.列表类型 ...

  10. NIO中的ZeroCopy

    前文提到网络IO可以使用多路复用技术,而文件IO无法使用多路复用,但是文件IO可以通过减少底层数据拷贝的次数来提升性能,而这个减少底层数据拷贝次数的技术,就叫做ZeroCopy. 操作系统层面的Zer ...