• 函数相关


    一.流程图

     

     

     

    二.函数相关的面试题:

    1.定义函数式需要确定那两个因素?

      函数名和参数(参数类型)

    2.如果函数中没有return那么这个函数的返回值是什么?

      反回的是None

    3.函数是什么和函数式编程的主要思想是什么?

      函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

      增加代码的重用性和可读性

    4.函数中有几种参数?

      一共有三种参数:

        普通参数:普通参数的传递并没有个数和数据类型的限制,可以传递字符串,数字,列表和字典。也不限定个数,需要注意的是:函数需要多少参数,

             调用的时候就要按照它定义时的顺序和数据类型传递过去。

        默认参数:默认参数是给参数加上一个默认的值,但我们调用函数的时候,如果传递了这个参数,那么使用我们传递过来的值;如果不传则使用默认的值,

             默认参数可以有多个,但是必须放在所有参数的最后。当我们有多个默认参数的时候,调用函数的时候可以使用参数名指定其中的某一个参数,以保证参数能准确的传递给被调用的函数。

             默认参数指向的必须是个不可变的对象。

        动态参数:def func(*args) 接受多个参数,内部自动构造元组,序列前加*,避免内部构造元组
                    def func(**kwargs) 接收多个参数,内部自动构造字典,序列前加**,直接传递字典
               def func(*args,**kwargs):接受多个参数,既可以自动构造元组,又可以自动构造字典。

      还有一种说法是:必备参数、关键字参数、默认参数、不定长参数。

    5.函数的参数是传值还是传引用?

      Python中传递的都是对象的引用,每个值的传递都是对象的引用,对象在这个过程中是不可复制的。

    6.关于可更改对象和不可更改对象的原理是什么?

      不可更改对象被重新赋值时,相当于新生成了一个值,变量相当于是抛弃原来的值,从而指向新的值。

      可更改对象再被赋值时,并没有重新指向新的值,而是对当前的值进行替换。

    7.Python的匿名函数。

      python 使用 lambda 来创建匿名函数:

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

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

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

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

    8.变量作用域分为几种,性质有分别是什么?

      变量作用域分为两种全局变量和局部变量:

        全局变量:全局变量可以在整个程序范围内访问。

        局部变量:局部变量只能在其被声明的函数内部访问。

    9.递归函数的定义和优点是什么?

         如果一个函数在自身内部调用它本身,那这个函数就是递归函数。

      递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

    10.函数的特性。

    • 切片: 
      list: L[A:B:C] 
      A,表起始。B表结尾。C表隔几个去一次,不填则为默认参数 
      tuple: 也可以切片,但是取出后仍是tuple类型

    • 迭代: 
      普通迭代:for … in .. : 
      没有索引的,只要是可以迭代的对象(字符串也可以迭代),都可以。

        例如:dict默认迭代的是key值。
        for value in d.itervalues()   # 迭代
        for k, v in d.iteritems()
    • 判断对象是否可以迭代:
      通过collections模块的Iterable类型判断:
      from collections import Iterable
      isinstance('abc', Iterable) # str是否可迭代
    • 如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。 
      for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等 
      for x, y in [(1, 1), (2, 4), (3, 9)]: #for里同时可以引用两个变量

    • Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

       for i, value in enumerate(['A', 'B', 'C']):
       enumerate()把list返回一个包含索引-value值得形式。
    • 列表生成式L:
      体会快速生成列表的方法
       [x * x for x in range(1, 11) if x % 2 == 0]
       [m + n for m in 'ABC' for n in 'XYZ']
       [x * x for x in range(1, 11)]
    • 生成器G: 
      列表元素按照某种算法推算出来,一边循环一边计算推算出后来的元素,可以节约大量空间

      创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。 
      generator是可迭代对象,直接用for可以遍历

      另外一种定义的方法:如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator

       def fib(max):
          n, a, b = 0, 0, 1
          while n < max:
              yield b
              a, b = b, a + b
              n = n + 1
  • 相关阅读:
    冲刺第二阶段第十天
    冲刺第二阶段第九天
    冲刺第二阶段第八天
    冲刺第二阶段第七天
    第十三周学习进度条
    冲刺第二阶段第六天
    第二冲刺阶段绩效评估
    Beta版总结会议
    Alpha版总结会议
    第二次冲刺阶段站立会议(十)
  • 原文地址:https://www.cnblogs.com/0704L/p/8445574.html
Copyright © 2020-2023  润新知