Python学习总结----基础篇8----函数

一、基本知识

1.函数的定义:

函数是指将一组语句的集合通过一个名字(函数名称)封装起来,要想执行这个函数,只需要调用其函数名称即可。

2.函数的特性

1)减少重复代码

2)使程序易扩展

3)使程序变得易于维护

3.语法定义

def hello():
print("hello, world ")


hello()

带参数

a,b = 5,9
c = a*b
print(c)

def calc(x,y):
result = x**y
return result

c = calc(a,b)
print(c)

二、函数参数与局部变量

形参:形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效,函数调用结束返回主调用函数后 则不能再使用该形参变量

 

实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,他们都都必须有确定的值,以便把这些值传给形参。因此应预先用赋值、输入等办法使参数获得确定值。

             

 

 

默认参数

#author=ykyk

def student_info(name,age,country,course):
print("------info------")
print("name:",name)
print("age:",age)
print("hometown:",country)
print("course:",course)

student_info("ykyk",23,"CN","Oracle")
student_info("tina",25,"CN","medicine")
student_info("tony",26,"USA","Chinese")

从上面的信息可以看出,hometown的信息基本都是CN,我们可以将其设置为默认参数

def student_info(name,age,course,country='CN'):

 

 

关键参数

正常情况时,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名称即可,但关键参数必须放在位置参数后面

student_info(age=32,name='Lucas',course='MySQL',)

 

非固定参数

若函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数

def student_info(name,age,*args):会将参入的参数变成一个元组的形式
print(name,age,args)


student_info("ykyk",27)
student_info("ykyk",27,'CN,Oracle')

××kwargs

def student_info(name,age,*args,**kwargs):
print(name,age,args,kwargs)

student_info("ykyk",22)
student_info("Lio",23,'CN','Oracle',gender='female',size='dick')

ykyk 22 () {}
Lio 23 ('CN', 'Oracle') {'gender': 'female', 'size': 'dick'}

局部变量

#author=ykyk

name = 'ykyk'

def change_name(name):
print("before:",name)
name = 'ykyk is learning Python'
print('after:',name)


change_name(name)

print("in outside: ",name)

输出

before: ykyk
after: ykyk is learning Python
in outside:  ykyk

 

全局变量和局部变量

在子程序中定的变量称为局部变量,在程序的一开始定义的变量称为全局变量,全局变量

的作用域是整个程序,局部变量作用域是定义该变量的子程序。

当全局变量与局部变量同名时,在定义局部变量的子程序内,局部变量起作用,在其他地方全局变量起作用

返回值

要想获得函数的返回值,可以用return语句把结果返回

注意:

1.函数在执行过程中只要遇到return语句,就会停止并返回结果,也就是函数的结束。

2.如果未在函数中指定return,那这个函数的返回值为None

 

递归

在函数内部,可以调用其他函数,如果一个函数在内部调用自身本身,这个函数就是递归函数

def calc(n):
print(n)
if int(n/2) == 0 :
return n
return calc(int(n/2))

calc(10)

输出

10
5
2
1

递归特性

1.必须有明确的结束条件

2.每次进入更深一层递归时,问题规模相比上一次递归都应有所减少

3.递归效率不高,递归层次过多会导致栈溢出

 

应用案例(引自Alex博客)

data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]

def binary_search(dataset,find_num):

print(dataset)

if len(dataset) >1:

mid = int(len(dataset)/2)

if dataset[mid] == find_num:  #find it

print("找到数字",dataset[mid])

elif dataset[mid] > find_num :# 找的数在mid左面

print("\033[31;1m找的数在mid[%s]左面\033[0m" % dataset[mid])

return binary_search(dataset[0:mid], find_num)

else:# 找的数在mid右面

print("\033[32;1m找的数在mid[%s]右面\033[0m" % dataset[mid])

return binary_search(dataset[mid+1:],find_num)

else:

if dataset[0] == find_num:  #find it

print("找到数字啦",dataset[0])

else:

print("没的分了,要找的数字[%s]不在列表里" % find_num)

binary_search(data,66)

匿名函数

匿名函数就是不需要显式的指定函数

def calc(n):
return n**n
print(calc(32))

#等价于
calc = lambda n:n**n
print(calc(32))

函数式编程

函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的的程序设计,

函数是面向过程的程序设计的基本单元

 

函数式编程中的函数这个术语不是指计算机中的函数,而是指数学上的函数,即自变量映射,也就是说,一个函数的值仅仅决定于函数参数的值,不依赖其他状态

高阶函数

变量可以指向参数,函数的参数能接受变量,那么一个函数就可以接收另一个函数作为参数,这个函数就称之为高阶函数

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

result = add(2,-45,abs) ads 绝对值
print(result)

输出
47

内置函数

https://docs.python.org/3/library/functions.html?highlight=built#ascii

posted on 2018-03-08 20:34  ykyk_dba  阅读(215)  评论(0编辑  收藏  举报

导航