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
# 全局變量在整個應用程序中都可以使用的