1.函数特点 c1.py
# 函数
# 特点
# 1.功能性
# 2.隐藏细节
# 3.避免编写重复的代码
# round(需要取近似值的数,精确到第几位)
a = 1.236
print(round(a,2))
# 通过help 查看函数功能
# 在命令行中输入 python 回车
# 通过help(round) 回车 查看
# 可以在命令行中输入 import this 查看python之禅
2.函数形式 c2.py
def funcname(parameter_list):
pass
# 1.参数列表可以没有
# 2.return value (若存在则为value,不存在则为none)
# practice1:(1)实现两个数字的相加;(2)打印输入的参数
#最大递归次数
# import sys
# sys.setrecursionlimit(50)
# 函数名尽量避免和系统的函数名同名
def add(x,y):
# 形参:形式参数
result = x + y
return result
def print_code(code):
print(code)
a = add(1,2) #实参:实际参数
# b = print_code("python: ")
# 这里打印a有值,b为none(在print_code只是调用了系统的print函数,并没有将code进行return,所以为默认的none)
# print(a,b)
# 下边的方法就会导致,超过最大递归调用次数,
# 定义的print函数,会调用内部的print函数,内部的print函数又会调用自己的print函数
# 一直自己调用自己,就会递归调用,从而超过最大递归调用深度
# def print(code):
# print(code)
# print(a)
3.序列解包 c3.py
def damage(x,y):
damage1 = x*3
damage2 = y*2 +10
return damage1,damage2
damages = damage(3,6)
# 序列解包
# 使用有意义的变量名,增强见名知意
skill1_damages,skill2_damages = damage(3,6)
print(type(damages))
print(damages)
print(skill1_damages,skill2_damages)
4. c4.py
# 序列解包
# a = 1
# b = 2
# c = 3
# print(a,b,c)
# d,e,f = 1,2,3
# print(d,e,f)
# g为一个元组,进行序列解包
# g = 1,2,3
# h,i,j = g
# print(h,i,j)
# a = 1
# b = 1
# c = 1
a=b=c=1
print(a,b,c)
5.函数参数 c5.py
# 函数参数
#1.必须参数(在函数定义时传入的参数。即下例中的x和y)
def add(x,y):
pass
#2.关键字参数(在传参时,不必考虑参数的顺序,通过关键字的方式,指定参数的赋值。例如下例中的方式),优点:增强了代码的可读性
add(y=2,x=1)
#3.默认参数(参考c6.py)
# (1)优点:
# 使用比较方便,当参数个数比较多时(假设参数6个,有3个是变的,3个是变的,就可使用默认参数,传变的即可)
# (2)注意点
# ①必须参数统一写在前边,默认参数写在后边(python 的语法规范)
# ②如果未使用关键字参数,则必须按照顺序进行;如果使用了关键字参数可以按照属性进行(参考c6.py)
# ③在使用时,默认值参数和必须参数不能混杂使用(和定义时是一样的),会报错(参考c6.py第18行)
#4.可变参数
# 当出现了,必须参数,*param时,默认参数,必须按照这个顺序
def demo(param1, *param, param2 = 2):
print(param1)
print(param)
print(param2)
# a = (1,2,3,4,5)
# *a:就是将a中的元素进行平铺(就和es6中的三个点的作用一样)
# 这种比较复杂的参数列表不太可取,在涉及之初就应该保证参数列表尽可能简单
demo('a',1,2,3,4,param2 = 'param2')
6. c6.py
# 默认参数,如果没有设置默认参数,须要在使用传入
# 默认 参数都放后边(写在一起),不能和必须参数间隔使用
# 如果没有特殊说明,形参和实参是按照传入的顺序进行一一对应的;如果涉及变化顺序的,可使用关键字参数进行标明传入的是哪个参数
def print_student_infor(name,old = 18,gender = '男',school = '人民路小学'):
print('我是' + name)
# 数字和字符串不能强制相加,须要先转类型,再相加
print('我今年'+ str(old))
print('我是' + gender +'生')
print('我在' + school +'上学')
print_student_infor('鸡小萌',18,'男','人民路小学')
print('~~~~~~~~~~~~~~~~~~~')
print_student_infor('鸡小萌')
print('~~~~~~~~~~~')
print_student_infor('石敢当')
print('~~~~~~~~~~~')
print_student_infor('喜小乐',16,'女')
print('~~~~~~~关键字参数~~~~~~~~~')
print_student_infor('果果',school='光明小学',old=14,gender='女')
print('~~~~~~~必须参数和默认参数混合使用会报错~~~~~~~~~')
# 不能进行混杂间隔使用
# print_student_infor('果果',old=14,'女',school='光明小学')
7. c7.py
def demo(param1, *param, param2 = 2):
print(param1)
print(param)
print(param2)
# a = (1,2,3,4,5)
# *a:就是将a中的元素进行平铺(就和es6中的三个点的作用一样)
# demo('a',*a,param2 = 'param2')
# *a:将每个数值分开传入,如果再以元祖的方式传入,那么到内部就变成了二维的元祖了
# demo('a',(1,2,3,4),param2 = 'param2')
# 这种比较复杂的参数列表不太可取,在涉及之初就应该保证参数列表尽可能简单
demo('a',1,2,3,4,param2 = 'param2')
8. 求平方和 c8.py
# 求任意个数的数值的平方和
# 在Python中for循环是不能形成一个作用域,函数时可以形成一个作用域的
def squsum(*param):
sum = 0
for i in param:
sum += i*i
print(sum)
squsum(1,2,3)
9. 关键字参数 c9.py
# 关键字参数
# 打印不同城市的温度
# 这里须用两个**;**param
def city_t(param1,**param):
print(param)
# items 是 param 的内置方法
for key,value in param.items():
print(key+':'+value)
a = {'nj':'20c','sh':'30c'}
# 这里只传入param1,所以param为空{},也不会报错
city_t(1)
city_t(1,**a)
10. 变量作用域 c10.py
# 变量的作用域
# 对于函数外部定义一个变量,是全局的,在函数内部可以打印出来
# 但在函数内部定义一个变量,在函数外部是不能打印出来的
c = 50 #全局作用域
def add(x,y):
c = x + y #局部作用域
print(c)
add(1,2)
print(c)
11. c11.py
# 局部变量只是一个相对的概念,例如在函数内部定义一个变量cc,
# 然后再在循环内执行 +i 操作,最终打印cc
# 在for循环外部是可以引用for循环内部的变量的例如 aa
# 在for循环内部也可使用for循环外部的cc
def demo():
cc = 0
# 块级作用域(在Python中,for循环不存在块级作用域)
# 所以在for循环外部是可以访问,for循环内部的 aa 变量的
for i in range(0,9):
aa = 'a'
cc +=i
print(aa)
print(cc)
demo()
12. c12.py
# 优先使用局部变量
c = 1
def demo():
c = 2
def fun():
c = 3
print(c)
fun()
# 链式,作用域链
demo()
13. c13.py
# 全局变量
# 在函数的内部定义一个变量,在函数外部进行访问
def demo():
global c
c = 1
demo()
print(c)
14. c14.py
import c13
print(c13.c)
(备注:以上内容来自七月老师的学习笔记,仅作为学习使用)