慕课网python学习笔记6

认识函数
round(a,2)函数将a保留小数点后两位
还可以进行四舍五入的功能
如何快速了解内置函数功能的方法
python —help(round)回车
敲击键盘的回车可以翻页
import this 打印出python之禅
函数的特性:
1、功能性
2、隐藏细节
3、避免编写重复的代码
组织代码
函数的定义及运行特点
1、函数的结构:def funcname(parameter_list),函数体需要缩进
1)参数列表可以没有;
2)函数体里可以使用return来返回结果;如果没有return这个关键字,则Python认为该函数返回的是None这样一个空值。
2、函数的几个特点:
1)函数定义后,必须要调用这个函数,才能起作用。
2)调用必须放在函数定义之后,不能在之前。
3)系统默认995次递归,超出则报错。
可以用如下的方式
import sys
sys.setrecursionlimit(1000000)
来设定递归次数;实际上达不到百万次的递归。
4)定义函数或变量时,尽量避免和Python的内置函数同名。
在这里插入图片描述
在这里插入图片描述
运行顺序:
1)定义函数add和print_code
2)调用函数add,把结果3赋值给a
3)调用函数print_code,调用过程中打印出Python
4)打印a
5)打印b(空值None)
如何让函数返回多个结果
return 后面的语句不会执行(即return语句的下一个语句)
return 返回多个结果,使用逗号,默认返回结果类型为元组
def damage(skill1,skill2):
damage1 = skill13
damage2 = skill
2+8
return damage1,damage2
#前面都有四个空格
damages = damage(3,6)
print(type(damages))
在这里插入图片描述
用序号显示返回结果是非常不好的习惯
好的方式是:
skill1_damage , skill2_damage=damage(3,6)
print(skill1_damage , skill2_damage)
序列解包:用有意义的变量名称来返回函数的值
序列解包与链式赋值
python多元赋值:
a, b, c = 1, 2, 3
d = 1, 2, 3
此时d被默认为是一个元组
序列解包:
第一种方式:a, b, c = [1, 2, 3]
第二种方式:a, b, c = d
注:序列解包时,序列中元素个数必须和变量数相等。
链式赋值:
x = y = z = 1
必须参数与关键字参数
参数(关键在于函数调用而不是定义上):
①必须参数:函数的参数列表中定义的必须赋值的参数。必须放在参数列表的前面。
②关键字参数:可以在函数调用时明确指出实参是传给哪个形参的,不一定要按照形参顺序。如:
def add(x, y):

return result
c = add(y = 3, x = 2)
3.定义了多少个形参就要传递多少个实参
默认参数
注意的坑:
1、所有非默认参数必须在所有默认参数前且不能出现混杂的情况,
不论定义时还是调用时都是一样。
2、要想向某一特定默认参数传递参数应该使用关键字参数指定要改变的默认参数,
否则将根据默认参数顺序依次匹配。
3、在传输默认参数时,在函数调用里有两种方式,
3.1、按顺序传输
3.2、通过关键字参数(可以不按顺序)传输.。
注意点是不能混杂着这两种方式传输,例如:
add(非默认参数,默认参数=‘要输入的值’,‘要输入的值’,默认参数=‘要输入的值’)
这是不可以的
在这里插入图片描述
在这里插入图片描述
可变参数
定义一个拥有可变参数的函数: 括号内形参前加星号*
Python会自动把可变参数列表所对应的实参组装成一个tuple;
def demo(*param):
print(param)
print(type(param))
调用函数 demo(1,2,3,4)
返回结果(1,2,3,4),类型为tuple
调用时直接传元组,则返回的结果是一个二维元组;若不想形成二维数组,调用时可以使用 * ,它将把元组里的元素平铺传递给函数。此时,*的作用是把元组里面的元素平铺出来,传递给函数;
在这里插入图片描述
在这里插入图片描述
可变参数可以和其他类型参数结合记起来。如可以在定义时加上必须参数,但可变参数必须要放在后面
函数参数的顺序是,必须参数、可变参数,默认参数必须在最后;当需更改默认参数值,必须用关键字参数给默认参数赋值:
在这里插入图片描述
鉴于此,不赞成把函数参数类别设计如此复杂。
关键字可变参数
格式:
def demo( ** param):
pass
这样在调用时可以传递多个关键字参数,此时python会将其转化为字典类型dict。若还想传递字典类型而不转化为多维数组,调用时需加上 **。
小技巧:
遍历字典类型数据方法:
for key,value in param.items():
print(key, ‘:’, value)
在这里插入图片描述
在这里插入图片描述
变量作用域
先来看一个小例子:
在这里插入图片描述
这里的c = x+y实际相当于a = x+ y,b = x + y,因为它是函数内部的变量,不影响全局变量
函数外部是全局变量;函数内部是局部变量。
函数体外部引用局部变量,是不能引用的;函数体内部的局部变量,不能改变全局变量。
在函数体内部,局部变量是不分层级的,不能形成块级作用域,可以互相引用。
作用域链
1)局部变量会在作用域内被优先使用;
2)局部变量具有相对性。如c=2这个变量在func1()函数中是局部变量,但对func2()函数来说,却是它的上一级,因此不是局部变量,可以被func2()来引用;
3)逐层逐级向外寻找变量的定义,很像一个链条,因此作用域有链式的特性;
4)如果是for循环向函数体内寻找变量,算作用域链吗?不算。原因是for循环体不是一个作用域,它对循环体外变量的调用属于函数体内变量调用的正常行为。
global关键字
global关键字——在函数外部引用函数内部变量,即把局部变量变成函数外部可引用的变量,此时也可以跟在函数外部定义的全局变量一样被其他模块导入。只要加上global关键字,就可以看作全局变量
def demo():
global c
c = 2

demo() #需要调用一下函数(如果不调用这个函数,直接print©,是打印不出任何东西的,因为电脑还没有执行这个程序)
print©
在这里插入图片描述
可以看到,执行c14.py,程序打印出两个2,第一次是导入模块时自动执行该模块下的程序,第二次是我们手动打印的print
划算还是不划算
是一个实际问题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值