您的位置:首页 > 编程语言 > Python开发

python学习笔记之函数及其高级特性

2018-01-19 21:56 806 查看
一.定义函数
• def关键字,依次写出函数名、括号、括号中的参数和冒号 :
• 在缩进块中编写函数体,函数的返回值用 return 语句返回。
     def 函数名():
         函数体
        return 返回值1,返回值2

二.调用函数
Python 内置了很多有用的函数,我们可以直接调用:
        • abs()
        • cmp()
 
• 数据类型转换函数:
    int(), float(), str(),unicode(),bool()
   函数名()
   实现打印返回值: print 函数名()
   总结:
      定义函数时,函数不执行;
      调用函数时, 函数才执行;

三.理解函数名
•函数名与变量名类似,其实就是指向一个函数对象的引用;
•给这个函数起了一个“别名”:函数名赋给一个变量

四.空函数
• 定义一个什么事也不做的空函数,可以用 pass 语句;
• pass 可以用来作为占位符,还没想好怎么写函数的代码,就可以先放一个 pass ,让代码能运行起来
     def nofunc():
      pass

五.参数检查
• 调用函数时,如果参数个数不对,Python 解释器会自动检查出来,并抛出 TypeError;
• 如果参数类型不对,Python 解释器就无法帮我们检查。
• 数据类型检查可以用内置函数 isinstance 实现函数返回值

  函数可以返回多个值吗?
  那编写python程序,思考下:
  定义一个函数func,传入两个数字,返回两个数字的平均值与最大值。
  def fun(*args):
   """
   返回最大值和最小值
   :param args: 传入多个数值
   :return: 最大值, 最小值
   """
    # 实质上 python 只能返回一个值;
    # 间接通过元组返回多个值 ;
  return max(args), min(args)

 六. 函数返回值

• 函数返回值用return关键字;
• 返回一个 tuple 可以省略括号;
• Python 的函数返回多值其实就是返回一个 tuple
• 函数执行完毕也没有 return 语句时,自动 return None

七.函数参数
•默认参数可以降低调用函数的难度。
定义一函数,计算x值的n次方。那如果计算x平方时只需要传入x值时怎么解决?
 默认参数注意事项:
•有多个参数时,变化大放前面,变化小的放后面;
•必选参数在前,默认参数在后

八.默认参数
默认函数容易出错点:
试一试:先定义一个函数,传入一个 list,添加一个END 再返回.

九.可变参数
- 可变参数就是传入的参数个数是可变的,可以是 1 个、2 个
到任意个,还可以是 0 个。*args

以数学题为例子,给定一组数字 a,b,c......,
请计算 a 2 + b 2 + c2+ ......
如果已经有一个 list 或者 tuple,要调用一个可变参数怎么办?
- Python 允许你在 list 或 tuple 前面加一个 * 号;
- 把 list 或 tuple 的元素变成可变参数传进去;
largs = [1,2,3]
func(largs[0],largs[1],largs[2])
func(*largs)

十.关键字参数
•关键字参数允许你传入 0 个或任意个含参数名的参数;
•这些关键字参数在函数内部自动组装为一个 dict;
•关键字参数用**kwargs
kwargs 可以改为其他变量名;
def inuser(name, age, **kwargs):          # kwargs 实质上是一个字典 ;
 print name, name, kwargs
 inuser("user1"  12    city="xi'an"   birth="20180101")

十一.参数组合
•参数组合是指可以必选参数、 默认参数、 可变参数和关键
字参数一起使用。
•参数定义的顺序必须是:必选参数、 默认参数、可变参数和
关键字参数。

十二.参数总结
• 必选参数
 
•默认参数:默认参数一定要用不可变对象
•可变参数:*args 是可变参数,args 接收的是一个 tuple
•关键字参数:**kw 是关键字参数,kw 接收的是一个dict
•对于任意函数,都可以通过类似 func(*args, **kw) 的形式调用它

十三.变量的作用域
• 局部变量:只能在函数内部使用的变量
• 全局变量:在整个程序中使用的变量
• global关键字:强制将局部变量转换为全局变量
# 全局变量
   num = 1
   def fun():
              # global 声明 num 为全局变量
   global num
              # 局部变量
   num = 5
   fun()
   print num
   5

十四.高级特性
1.迭代
  是否可以for循环遍历的对象;
  isinstance判断是否可迭代;2.列表生成式
   生成列表的公式
   需求: 生成一个列表, 返回1-100中偶数的平方;
 
   
   变异的列表生成式:
   
   练习:找出/etc下文件中以.conf结尾的文件;
   提示:
     - os.listdir("/etc")
     - s.enswith(".conf")
   3.生成器
   *为什么需要生成器?
  •通过列表生成式,我们可以直接创建一个列表,受到内存限制,列表容量肯定是有限的;
  •创建一个包含 100 万个元素的列表,占用很大的存储空间
  生成器是什么?
  •在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的 list,从而节省大量的空间。
   在 Python 中,这种一边循环一边计算的机制,称为生成器(Generator)
  怎么创建生成器?   
  •把一个列表生成式的 [] 改成 ()
  •使用g.next()方法依次读取元素(麻烦)
    
    使用 for 循环(推荐)
    python编程:著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:1, 1, 2, 3, 5, 8, 13, 21,...  
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: