python的基础函数以及一些特性

1.函数基本语法以及特性

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

特性:1.减少重复代码

     2.使程序变得可扩展

   3.使程序变得易维护

# 函数的定义
# 无参数,无返回值类型
def test1():
    print('test1')

# 无参数,有返回值类型
def test2():
    return 0

# 有参数,无返回值类型
def test3(x):
    print(x)

# 有参数,有返回值类型
def test4(x):
    return 2*x

# 函数的调用
test1()
test2()
test3(3)
test4(4)
View Code
def test(x, y):
    print(x, y)

# 与参数一一对应
test(3,4)
View Code

 

2.参数与局部变量

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

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

# x,y是形参
def test(x, y):
    print(x, y)

# 3,4是实参
test(3,4)
View Code

c.参数不固定的时候,形参该如何设置呢?

这时,我们使用*args

*args:接收N个位置参数,转换成元组的形式

# 参数不固定
# 参数组:接收的是位置参数
# *args:接收N个位置参数,转换成元组的形式
def test(x, *args):
    print(x)
    print(args)

test(1,2,3,4)
test(*(3,4,5))
View Code

d.**kwargs:把N个关键字参数,转换成字典的方式

# **kwargs:把N个关键字参数,转换成字典的方式
# 关键字参数字典处理,字典传值
def test(**kwargs):
    print(kwargs)
    print(kwargs['name'])

# 方式一
test(name='x', age=2)
# 方式二
test(**{'name':'x', 'age':2})
View Code

e.默认参数

# 默认参数:给定默认值,如果给形参传值,则会打印传值,否则会打印默认值
def test(x, y=5):
    print(x)
    print(y)

x = 4
test(x)
y = 7
test(x,y)
View Code

 

3.返回值

定义:要想获得函数的执行结果,可以使用return语句把结果返回

注意:1.函数在执行过程中只要遇到return语句,就会停止执行并返回结果,所以,return语句代表着函数的结束

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

# x,y是形参,
def test(x, y):
    print(x, y)
    # return是返回值标识,该函数返回x+y的值
    return x + y

# 3,4是实参
test(3,4)
print(test(3,4))
View Code

 

4.递归

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

特性:1.必须有一个明确的结束条件,否则发生循环导致内存泄漏,程序崩溃

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

   3.递归效率不高,递归层次过多会导致栈溢出,在计算机中,函数调用时通过栈stack这种数据结构实现的,

    每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会建一层栈帧,由于栈的大小不是无限的,

    所以递归调用次数过多,导致栈溢出。

def calcute(n):
    print(n)
    if int(n / 2) > 0:
        return calcute(int(n/2))
    print('-->',n)

calcute(10)
View Code

 

5.局部变量和全局变量

school = 'Oldboy edu.'

#快捷键 command+/
def change_name(name):
    # 绝对不允许这样使用全局变量,函数会被多次调用,这个全局变量的值不确定因素影响项目
    # global string
    # string = 'adsfasdf'

    # 修改全局变量:global school
    global school
    school = 'ANHUI'
    print('before change:', name)
    # 局部变量:生命在函数内部,在函数内部生效,这个函数就是这个变量的作用域
    name = 'ALEX'
    print('after change:', name)
    print('--学校:%s---' %school)

name = 'alex'

change_name(name)
print(name)
print(school)

# print(string)

# 复杂的类型都可以修改,字符串和数值不可以修改
names = ['alex','hack','rain']
def change_names():
    print(names)
    names[0] = '金角大王'
    print('在里面',names)


change_names()
print(names)
View Code

 

 

 

posted @ 2018-05-30 11:00  tfzhou  阅读(219)  评论(0编辑  收藏  举报