Python-函数基础篇

Posted 夜尽天已明

tags:

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

函数基础

函数定义好了之后并不会自动执行,需要调用才会被执行

### 函数命名规范
* 函数名也是一个标识符
* 由数字、字符下划线组成,不能以数字开头,严格区分大小写,不能使用关键字
* 遵守命名规范,使用下划线连接,顾名思义

def tell_story():
print(\'春眠不觉晓\')
print(\'处处闻啼鸟\')
print(\'夜来风雨声\')
print(\'花落知多少\')

tell_story()

* 函数声明时,括号里的参数我们称之为形式参数,简称形参
* 形参的值是不确定的,只是用来占位的

def hello(person1,person2):
print(person1 + \'对\' + person2 + \'说:"hello!"\')

调用函数时传递数据

函数调用时传入的参数,才是真正参与运算的数据,我们称之为实参,

hello(\'张三\',"李四") # 会把实参一一对应的传递,交给形参处理

还可以通过定义变量名的形式给形参赋值

hello(person1="李四",person2="张三")

### 函数的返回值
> 函数的返回值就是函数执行的结果,并不是所有的函数都必须要有返回值

def add(a,b):
c = a + b # 变量c在外部是不可见的,只能在函数内部使用
return c # return 表示一个函数的执行结果

获取到add函数的结果,然后再求结果的4次方

result = add(1,2)
print(result ** 4)

print 就是一个内置函数

x = print("hello")
print(x) #None


### 函数的注释 

def add(a,b):
"""
这个函数用来将两个数字相加
"""
return a + b
print(add(1,3))

help(add) #

def add(a:int,b:int): #函数不限制参数类型,只给参数建议类型
return a + b
z = add(\'hello\',\'world\' )
print(z)

### 函数调用函数

def test1():
print(\'test1开始了\')
print(\'test1结束了\')

def test2():
print(\'test2开始了\')
test1()
print(\'test2结束了\')

test2()

* 定义函数求[n,m]直接所有整数之和

def add(n,m):
x = 0
for i in range(n,m):
x += i
return x
result = add(0,101)
print(result)

* 求一个N的阶乘

def fac(n):
x = 1
for i in range(1,n+1):
x *= i
return x
print(fac(5))

* 计算m阶乘的和 m = 6 ==> 1!+2!+3!+4!+5!+6!

def fac_sum(m):

x = 0

y = 1

for i in range(1,m+1):

y *= i

x += y

return x

print(fac_sum(5))

def fac_sum(m):
x = 0
for i in range(1,m+1):
x += fac(i)
return x
print(fac_sum(5))

### 默认参数的使用

def say_hello(name,age,city="北京"): # 缺省参数要写到最后,形参xity设置了一个默认值
print(\'大家好,我是{},我今年{}岁了,我来自{}\'.format(name,age,city))

say_hello(\'jack\',19) # 如果没有传递city的参数,使用默认值"北京"
say_hello(name = \'tony\',age = 23)

如果有位置参数和关键字参数的话,关键字参数一定要放到位置参数的后面,

say_hello(\'jerry\',age=24) # jerry要写到前面,不然报错

有些函数的参数是,如果你传递了参数就使用传递的参数,如果没有传递参数,就使用默认的值

print函数里end就是一个缺省参数,

print(\'hello world\',end="---")
print(\'hi\')

print(\'hello\',\'nihao\',sep="****")
print(\'hjiijjk\')

### 可变参数的使用

*args 表示可变位置参数 ,最低需要两个参数,**kwargs 表示可变的关键字参数

def add(a,b,*args):
print(\'a = {},b = {}\'.format(a,b))
print(\'args = {}\'.format(args)) # 多出来的可变参数会以元组的形式保存到args里
c = a + b
for i in args:
c += i
return c
print(add(1,3,4,9,8,2))

def add(a,b,*args,mul = 1,**kwargs):
print(kwargs) #kwagrs是以字典的方式存放

add(1,2,3,4,5,c = 1,d = 2)

### 可变数据类型和不可变数据类型的传参

def test(a):
a = 100

def demo(nums):
nums[0] = 10

x = 1
test(x)
print(x)

y = [3,4,5,6,2]
demo(y)

print(y)

## 函数的注意事项

* 函数的三要素: 函数名,参数和返回值
* 在有一些编程语言里,允许函数重名,python里不允许函数的重名,如果函数重名了,后一个函数会覆盖前一个函数
* python里函数名也可以理解成为一个变量名 

def test(x): # test ==一个函数

print(\'good,x={}\'.format(x))

test = 5 # 重新赋值5给test了

test(3) # 5不能作为函数来调用

TypeError: \'int\' object is not callable

### 递归函数的使用

count = 0
def test():
print(\'test\')
global count
count += 1
if count < 5:
test()
test()

* 求1~n的和

def get_num(n):
if n == 0:
return 0
return get_num(n-1) + n

print(get_num(6))

* 使用递归求n! 

def fac(n):
if n == 1:
return 1
return fac(n - 1) * n

print(fac(6))


* 使用递归求斐波那契数列的第N个数字

def fib(n):

if n ==2 or n == 1:
    return 1
return fib(n-1) + fib(n -2)

print(fib(4))

### 匿名函数 

用lambda 关键词可以创建一个小型匿名函数,省去使用def声明函数的操作

#lambda函数的语法只包含一个语句,如下:

lambda 参数列表:运算表达式

def add(a,b):
return a + b

x = add(4,5)
print(x)

fn = add # 相当于给函数起了一个别名
print(fn(6,5))

除了使用def关键字定义一个函数外,还能使用lambda表达式定义一个函数

lambda a,b : a + b #匿名函数,用来表达一个简单的函数,函数的调用次数很少,基本就是调用一次

调用匿名函数的两种方法:

给他定义一个名字,很少这样使用

把这个函数当做参数传给另一个函数来使用,这样的场景比较多

mul = lambda a,b : a + b
print(mul(4,5))

def calc(a,b,fn):
c = fn(a,b)
return c

def add(x,y):
return x + y

def minus(x,y):
return x - y

print(calc(5,6,add))

print(calc(10,5,minus))

x3 = calc(5,7,lambda x,y: x + y)
print(x3)

x3 = calc(5,7,lambda x,y: x * y)
print(x3)

x3 = calc(5,7,lambda x,y: x - y)
print(x3)

x3 = calc(5,7,lambda x,y: x / y)
print(x3)

以上是关于Python-函数基础篇的主要内容,如果未能解决你的问题,请参考以下文章

Python基础篇_函数及代码复用

python之基础篇——模块与包

python基础篇-函数和代码的复用

Python基础篇第2篇: Python自定义函数

函数——python基础篇

python 基础篇 12 装饰器进阶