Python学习笔记 之 函数

Posted 雨纷纷草木深

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习笔记 之 函数相关的知识,希望对你有一定的参考价值。

函数


 

函数式编程最重要的是增强代码的重用性和可读性

  1.  定义和使用

def 函数名(参数):

  ...

  函数体

  ...

  返回值

 

函数的定义主要有如下要点:

def:表示函数的关键字

函数名:函数的名称,日后根据函数名调用函数

函数体:函数中进行一系列的逻辑计算

参数:为函数体提供数据

返回值:当函数执行完毕后,可以给调用者返回数据

 

举例:

1 def mail():
2     n = 123
3     n += 1
4     print(n)
5 mail()
6 f = mail
7 f()

结果:

124

124

1-1 返回值

函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。

1 def show():
2     print(\'a\')
3     return [11,22]
4     print(\'b\')
5 show()

结果:

a   

1-2 参数

函数中有三种不同的参数:

  •  普通参数
  •  默认参数
  •  动态参数

普通参数

1 def show(a1,a2):
2     print(a1,a2)
3 
4 show(11,22)

结果:

11  22

默认参数:默认参数需要放在参数列表最后

1 def show(a1,a2=99):
2     print(a1,a2)
3 
4 show(11)

结果:

11  99

指定参数

1 def show(a1,a2):
2     print(a1,a2)
3 
4 show(a2=123,a1=190)

结果:

190  123

动态参数

1 def show(*arg):# * - 接收参数并转换元组
2     print(arg,type(arg))
3 
4 show(1,56,78,8979)

结果:

(1,56,78,8979) <class \'tuple\'>

1 def show(**arg): #  ** - 接收参数并转换字典     
2     print(arg,type(arg))
3 
4 show(n1=78,uu=123)

结果:

{\'uu\': 123, \'n1\': 78} <class \'dict\'>

 

1 def show(*arg1,**args):# 一个*的在前,两*在后
2     print(arg1,type(arg1))
3     print(args,type(args))
4 
5 show(12,34,34,54,n9=33,n2=99)# 一个*的在前,两*在后

结果:

(12, 34, 34, 54) <class \'tuple\'>

{\'n2\': 99, \'n9\': 33} <class \'dict\'>

 

1 def show(*arg1,**args):# 一个*的在前,两*在后
2     print(arg1,type(arg1))
3     print(args,type(args))
4 
5 l = (11,22,3,4)
6 d = {\'n1\':89,\'k1\':\'hello\'}
7 show(l,d)

结果:

((11, 22, 3, 4), {\'k1\': \'hello\', \'n1\': 89}) <class \'tuple\'>

{} <class \'dict\'>

很明显,结果不是我们想要的。关键是如果我们使用show(l,d)

那么和我们使用show(1,56,78,8979) 没有什么区别。所以,为了解决这种冲突问题,只需要在 l 前加一个*,在 d 前加两个 * 即可:

1 def show(*arg1,**args):# 一个*的在前,两*在后
2     print(arg1,type(arg1))
3     print(args,type(args))
4 
5 l = (11,22,3,4)
6 d = {\'n1\':89,\'k1\':\'hello\'}
7 show(*l,**d)

结果:

(11, 22, 3, 4) <class \'tuple\'>

{\'n1\': 89, \'k1\': \'hello\'} <class \'dict\'>

符合我们的要求

 

动态参数实现字符串格式化:

1 s1 = "{0} is {1}"
2 ret = s1.format(\'Young\',\'handsome\')
3 print(ret)

结果:

Young is handsome

 

1 s1 = "{0} is {1}"
2 l = [\'Young\',\'handsome2\']
3 ret = s1.format(*l)
4 print(ret)

结果:

Young is handsome2

 

1 s1 = \'{name} is {value}\'# 字典这里就不是{0}、{1}了,而是用{key}、{value}
2 ret = s1.format(name=\'Young\',value=\'handsome\')
3 print(\'第一:\',ret)
4 
5 s2 = \'{name2} is {key}\'
6 d = {\'name2\':\'Young\',\'key\':\'smart\'}
7 ret = s2.format(**d)
8 print(\'第二:\',ret)

结果:

第一: Young is handsome

第二: Young is smart

 

 2.  内置函数

any : 只要有一个是真的就是真的

 

 

ord chr配合使用

 

 

chr    ord    random.randint 可以生产验证码

 

enumerate

 

 eval

map

 

 

filter

1 li=[1,22,33,45,74,788]
2 def func(num):
3     if num>33:
4         return  True
5     else:
6         return False
7 n = filter(func,li)
8 print(list(n))

结果:

[45, 74, 788]

 

将列表中大于 33 的元素拿出来

 

 

 

 

以上是关于Python学习笔记 之 函数的主要内容,如果未能解决你的问题,请参考以下文章

python学习笔记之装饰器(语法糖)

python学习笔记012——pdb调试

Python学习笔记之正则表达式

Python学习笔记之三lambda表达式用法小结

python学习笔记之函数

学习Python函数笔记之二