函数

2018-03-29  本文已影响0人  Ji_uu

1

#函数
#print()
a = 1.12386
result = round(a, 2)
print(result)


#保留小数后三位
a = 1.12386
print(round(a, 2))  #函数里面嵌套函数


#用循环怎么取小数点后两位?

2

# def funcname(parameter_list):   #参数列表
#     pass

'''
特点:
1 参数列表可以没有
2 return value   #没有return 语句的话,将返回None
'''

#实现两个数字的相加
#打印输入的参数
# import sys
# sys.setrecursionlimit(100)#最大的递归层数


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


# def print(code):  #注意定义函数的时候不要用系统的关键字
#     print(code)


# def print_code(code):
#     print(code)

add(1, 2)
# print(add)
# print_code('python')

3

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

def print_code(code):
    print(code)
    return 'hehe'

a = add(1, 2)
b = print_code('python')

print(a, b)
#执行结果
#python
#3 None     #函数的调用顺序?    #这一个None也是值得思考的

# python
# 3 hehe



def add(x, y):   
    print(x + y)
    return 'heihei'
    
print(add(8, 2))

#执行结果
# 10
# heihei

#定义一个函数,不管中间写的是什么,最后要有一个 return 关键字,返回一些东西。
# 如果没有return ,Python会自己返回一个None

4让函数返回多个结果

#函数返回多个结果

def damage(skill1, skill2):
    damage1 = skill1 * 3
    damage2 = skill2 * 2 + 10
    return damage1, damage2

damages = damage(3, 6) 

print(damages[0], damages[1])   
#这样的返回结果不好,

skill1_damage, skill2_damage = damage(3, 6)  
#这样的接收比较好。叫序列解包。不要用下标索引的方法
print(skill1_damage, skill2_damage)

#可以认为3和6是初始伤害,damages是最终计算后的伤害值
print(type(damages))

5序列解包和链式赋值

#序列解包和链式赋值
a = 1
b = 2
c = 3
a, b, c = 1, 2, 3

d = 1, 2, 3
print(type(d))

a, b, c = d #这就叫序列解包
print(d)

6参数

#参数

# 1 必须参数
# 2 关键字参数

def add(x, y):  #x, y 是形式参数
    result = x + y
    return result

f = add(5, 6)  #5, 6是实参
print(f)

c = add(y=3, x=2)   #这是关键字参数
#告诉Python实参是给那个形参赋值的
#它的意义是代码的可读性高!!


# 3 默认参数     #简化了代码 
#注意,必须参数要放在前面,不能放在默认参数的后面
def print_student_msg(name, gender='男', age=18):
    return name , gender, age

stu01 = print_student_msg(name='hehe')
stu02 = print_student_msg(name='haha', age=20)
print(stu01)
print(stu02)


#可变参数
def demo(*param):
    print(param)
    print(type(param))

demo(1,2,3,4,5,6)


# 这个相当于
def demo(param):
    print(param)
    print(type(param))

demo((1,2,3,4,5,6))


#注意可能会成为二维的元祖
def demo(*param):
    print(param)
    return (type(param))

# a = (1,2,3,4,5,6)
# demo(a)   #注意可能会成为二维的元祖  #正确的做法是  demo(*a)

f = demo((1,2,3,4,5,6))  #注意可能会成为二维的元祖
print(f)



#可变参数
def demo(param1, *param, param2=6):
    print(param1)
    print(param)
    print(param2)
    return 'hehe'

demo('a', 1,2,3)


# a
# (1, 2, 3)
# 6            


# hehe  为什么没有返回  #这样会将 hehe 返回
# f = demo('a', 1,2,3)
# print(f)


#可变参数的使用场景

def squsum(*param):
    sum = 0
    for i in param:
        sum += i * i
    print(sum)

# squsum(1, 2, 3)

# 这样也可以
# squsum(*[1,2,3])



#关键字可变参数
def city_temp(**param):
    print(param)
    print(type(param))
    pass

city_temp(bj='32c', xm='23c', sh='30c')

#打印的结果
# {'bj': '32c', 'xm': '23c', 'sh': '30c'}
# <class 'dict'>


#用循环来打印   #错误的演示
def city_temp(**param):
    for key, value in param:
        print(key, ':', value)

city_temp(bj='32c', xm='23c', sh='30c')

# 打印的结果
# b : j
# x : m
# s : h


#正确的打开方式
def city_temp(**param):
    for key, value in param.items():  #注意方法后面的括号
        print(key, ':', value)

city_temp(bj='32c', xm='23c', sh='30c')

# 打印的结果
# bj : 32c
# xm : 23c
# sh : 30c

#补充
a = (bj='32c', xm='23c', sh='30c')
city_temp(**a)

7变量的作用域

#变量作用域
c = 50

def add(x, y):
    c = x + y
    print(c)   #这个c和上面的c作用域的范围不一样,

add(1, 3)
print(c)

#打印的结果
# 4
# 50



def demo():
    c = 10

print(c) #这个会报错  #外部无法引用内部的变量




c = 10        #全局变量
def demo():
    c = 50     #局部变量   #可以在函数的内部引用外部的变量
    print(c)



#局部变量只是相对的。 
print('----------------------------------')
def demo():
    c = 50
    for i in range(0, 9):
        a = 'a'
        c += 1
    print(c)
    print(a)   #我们在外部可以引用for循环内部的变量
                #原因是Python中没有块级作用域的概念
demo()


c = 1

def func1():
    c = 2
    def func2():
        c = 3
        print(c)
    func2()

func1()   
#我们一直往下看,发现func2() 函数调用了,c=3 在func2() 的内部,其他的都是在 func2() 外部



#global关键字
def demo():
    global c 
    c = 666

demo()   #执行函数后global才有效
print(c)  

#执行结果
#666
# 全局变量在整个应用程序中都可以使用的
上一篇下一篇

猜你喜欢

热点阅读