再遇函数

  • 动态参数

    • *args,动态位置参数接收到的是元组,使用时注意位置参数一定要在动态参数前面,否则位置参数的内容全部被动态参数接收
    • **kwargs,动态关键字参数,接收到的是字典,使用时注意与默认值参数位置,默认值在**kwargs的前面
    • 顺序: 位置参数>*args>默认值参数>**kwargs
    • 在实参位置上*,**是代表把列表或者字典迭代打散
    • 在形参位置,*,**是代表把位置参数,关键字参数聚合成一个列表,字典.
    • 函数的注释,在函数内部输入"""+回车
  • 命名空间
    • 内置命名空间:存放Python为我们提供的名称空间,如:str,int,list,tuple等
    • 全局命名空间:函数声明外为变量命名的空间
    • 局部命名空间:在函数内部的空间
    • 全局作用域:内置命名空间+全局命名空间 可用globals查询
    • 局部命名空间:局部命名空间 可用locals查询
  • 函数嵌套
    • 函数里面可以分层级叠加使用函数,跟if语句相似
    • 函数只有调用了才会执行 即出现()
    • 注意执行顺序
  • global和nonlocal
    • global:在局部空间调用全局空间中的变量,可改变全局变量中的值
    • nonlocal:只能在局部空间中使用,调用的也是相邻一级中的变量,如果相邻一级找不到再去上一级中寻找,但是最终只会寻找到全局变量中的下一层,不会到全局中寻找.

习题

# 2 写函数,接收n个数字,求这些参数数字的和。(动态传参)
# lst=[1,23,12,34,12,6,56,3,76]
# def sum(*args):
#     num = 0
#     for el in args:
#         num = num + el
#     return num
# print(sum(*lst))
# 3读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
# a = 10
# b = 20
# def test5(a,b):
#         print(a,b)
# c = test5(b,a)
# print(c)
#a = 20,b=10,c=None  程序在执行c = test5(b,a)时通过位置传参把全局空间中b,a 的值赋值给了局部空间中的a,b,
# 函数执行完毕打印出ab的值,程序在执行完c = test5(b,a)后,局部命名空间的变量的值清空,所以在全局命名空间中打印c为None

#4,读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
# a=10
# b=20
# def test5(a,b):
#     a=3
#     b=5
#     print(a,b)
# c = test5(b,a)
# print(c)
# print(a,b)
# 函数中打印的a=3,b=5全局空间中打印的a=10,b=20,c=None,函数中的ab属于局部命名空间,最后打印的ab属于全局命名空间
# 程序执行到print(c)的时候,c并没有返回值 所以为None
# 5
# 写函数,传入函数中多个实参(均为可迭代对象如字符串,列表,元祖,集合等),
# 将每个实参的每个元素依次添加到函数的动态参数args里面.
# 例如 传入函数两个参数[1,2,3] (22,33)最终args为(1,2,3,22,33)
# lst=[1,2,3]
# tu=(22,33)
# z ="123jia"
# s={1,2,3,4,5}
# def die(*args):
#     print(args)
# die(*lst,*tu,*z,*s)
# 6,写函数,传入函数中多个实参(实参均为字典),将每个实参的键值对依次添加到函数的动态参数kwargs里面.
# 例如 传入函数两个参数{‘name’:’alex’} {‘age’:1000}最终kwargs为{‘name’:’alex’ ,‘age’:1000}
# dic = {‘name‘:‘alex‘,‘age‘:‘102‘,‘sex‘:‘未知‘}
# def dit(**kwargs):
#     print(kwargs)
# dit(**dic)
#7, 下面代码成立么?如果不成立为什么报错?怎么解决?
#7.1
# a = 2
# def wrapper():
#         print(a)
# wrapper()
# 成立  局部空间可以用全局空间中的变量
#7.2
# a = 2
# def wrapper():
#     a += 1
#     print(a)
# wrapper()
# #UnboundLocalError: local variable ‘a‘ referenced before assignment
# 局部空间可以调用全局空间中的变量,但是么有global不能赋值,因为没有创建新的变量a
# #7.3
# def wrapper():
#     a = 1
#     def inner():
#         print(a)
#     inner()
# wrapper()
# 可以 局部空间中优先调用就近一层中的变量
# #7.4
# def wrapper():
#     a = 1
#     def inner():
#         a += 1
#         print(a)
#     inner()
# wrapper()
#错误 局部变量赋值之前要先进行创建a
# 8,写函数,接收两个数字参数,将较小的数字返回.
# a=input("请输入数字a:")
# b=input("请输入数字b")
# def compare(a,b):
#     return a if a>b else b
# print(compare(a,b))
# 9,写函数,接收一个参数(此参数类型必须是可迭代对象),将可迭代对象的每个元素以’_’相连接,形成新的字符串,并返回.
# 例如 传入的可迭代对象为[1,‘老男孩‘,‘武sir‘]返回的结果为’1_老男孩_武sir’
# lst = [1,‘老男孩‘,‘武sir‘]
# def y(*args):
#     s = ""
#     for el in args:
#         s=s+str(el)+"_"
#     print(s.strip("_"))
# y(*lst)
# 10
# 写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}
# 例如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此题用到max(),min()内置函数)
# def sun(*args):
#     dic = {}
#     dic[‘max‘]=max(args)
#     dic[‘min‘]=min(args)
#     print(dic)
# sun(2,5,7,8,4)
# 11
# 写函数,传入一个参数n,返回n的阶乘
# 例如:cal(7)  计算7*6*5*4*3*2*1
# def cal (s):
#     if s ==0:
#         return True
#     else:
#         return s*cal(s-1)
# print(cal(4))
# 12写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组
# 例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃’,‘A’)]
#
# def pu():
#     l = [‘红心‘,‘草花‘,‘黑桃‘,‘方片‘]
#     l1 = [‘A‘,1,2,3,4,5,6,7,8,9,‘J‘,‘Q‘,‘K‘]
#     l2 = []
#     for i in l:
#         for el in l1:
#             l2.append((i,el))
#     print(l2)
# pu()
# 14 有如下函数:
# def wrapper():
#     def inner():
#         print(666)
# wrapper()
# 你可以任意添加代码,用两种或以上的方法,执行inner函数.
# 1
#def wrapper():
#     def inner():
#         print(666)
#     inner()
# wrapper()
# 2
# def wrapper():
# #     def inner():
# #         print(666)
# #     return inner()
# # wrapper()
# 1,有函数定义如下:
# def calc(a,b,c,d=1,e=2):
#     return (a+b)*(c-d)+e
# 请分别写出下列标号代码的输出结果,如果出错请写出Error。
# print(calc(1,2,3,4,5)) # 2
# print(calc(1,2)) #error
# print(calc(e=4,c=5,a=2,b=3))# 24
# print(calc(1,2,3))# 8
# print(calc(1,2,3,e=4))# 10
# print(calc(1,2,3,d=5,4))__error___

# 2,(此题有坑)下面代码打印的结果分别是_list1=[10,‘a‘],list=[123],list3=[10,‘a‘].
# def extendList(val,list=[]):
#     list.append(val)
#     return list
# list1 = extendList(10,)
# list2 = extendList(123,[])

  

原文地址:https://www.cnblogs.com/lingcai/p/9452474.html

时间: 2024-10-16 01:31:12

再遇函数的相关文章

复利计算器4.0之再遇JUnit

复利计算器4.0之再遇JUnit 前言    虽然之前的复利计算器版本已经尝试过使用JUnit单元测试,但由于没有系统性地学习过JUnit的使用,用得并不好,主要问题表现在测试的场景太少,并没有达到测试所需的全面性,没能体现JUnit这一神器的精髓所在,为此本版本的复利计算器在JUnit单元测试方面做了一些完善. 源代码包结构 如上图所示,我把测试类统一放在新建的test源码文件下(test打错了,已改),以便和程序代码分离,方便操作. 细心看你就能发现,test目录下的包和程序SRC目录下相应

hlg1306再遇攻击--射线法判断点是否在多边形内部

再遇攻击 Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 313(40 users) Total Accepted: 91(32 users) Rating:  Special Judge: No Description Dota中英雄技能攻击会有一个范围,现在释放一个技能给出他的攻击范围和目标英雄的位置,问是否能攻击到.攻击范围保证是一个多边型. Input 有多组测试数据 第一行输入1个整数n, 期中n代表攻击范围是给出的n个点

充满BUG的世界观——再遇Java内存泄露

发现内存泄露除了仔细看代码的确没有太好的方法.首先看gc log, 确定是内存泄露,而不是内存不够.内存泄露的特点就是以每次Full GC后使用的最低内存为起点,拟合一条线.如果这条线是随时间递增的一条曲线,那么很大程度上代表着内存泄露. 然后使用 jmap -histo [pid] 来查看你的所有对象所占内存的比例.你可能很不幸的发现[B 这个byte数组对象占用了绝大多数.这的确没有更好的方法了.只能一点点的看代码.检查一下有没有写成循环的地方.检查一下有没有申请的内存没有释放.检查一下全局

再论函数指针、函数指针数组

一.基本概念 数组名:本质是指向数组第一个元素的常量指针,即数组首地址 函数名:本质是指向函数第一条指令的常量指针,即函数首地址 函数指针:保存了函数首地址,可以看做函数的别名 二.函数指针的声明方法 type (*func)(type &, type &) 1.该语句声明了一个指针func,它指向了一个函数: 2.该函数带有2个type型参数,并返回一个type型的值: p.s. tpye类型可以看做int或者float等C++类型 3.可以把整个函数看做一个数据类型 tpye func

mysql客户端( Navicat)远程登录操作再遇问题 1142-create command denied to user×××

给用户添加CREATE,DROP权限. Mysql命令: GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON systest.* TO [email protected]'%' identified by 'root'; 然后再在navicat中操作,问题解决啦.

SaaS战火点燃 微信再遇阿里、网易

近日,在企业级SaaS服务战场,最大的新闻莫过于移动霸主微信推出了企业微信.于是乎,众人摇旗呐喊:“狼来了!”.之所以会发出如此恐惧的声音,众人还是因为害怕企业微信背后的那只老虎——微信.这一次企业微信的推出,尽管一众在企业级市场奋战的大小服务平台都表示出了些许敌意,但是最紧张的莫过于阿里钉钉和易信企业版.在上一次的移动社交大战中,阿里来往和易信已经有了惨痛的经历,这一次恐怕无论如何他们也会卯足了劲,与企业微信厮杀到底. 前翻社交阿里.网易败在失去先机,今朝SaaS服务他们抢先掠夺城池 兵者,贵

再遇UML之用例图

用例图主要是用图来表示系统的主事件流程.它主要用来描述客户的需求,即用户希望系统具备完成一定功能的能力,通俗地理解用例就是软件的功能模块.设计人员根据客户的需求来创建和解释用例图,用来描述软件应具备哪些功能模块以及这些模块之间的调用关系. 组成: 用例图包含:参与者(Actor).用例(Use Case).系统边界.关系 参与者和用例用关联连接以求把系统的整个结构和功能反映给用户,对应的是软件的结构和功能分解. 用例之间的关系:泛化.包含.扩展 关系细化 包含include 使用包含用例来封装一

【课程16】Python再识函数

变量的作用域: 1.全局变量-同一个文件中所有代码可用 2.局部变量-函数内部里面 注意点:gl0bal x在函数内容修改全局变量. 缺省参数: 1.在输入情况下,不给形参赋值,即形参为缺省参数 def addsum(start =1 ,end = 100,step = 1): i = start sumData = 0 while i <= end: sumData += i i += step return sumDataprint(addsum())注意:缺省参数一定要在必填后面 可变数量

再遇四渠注水问题!

题意及思路 题意:略 思路:每一个i号英雄,尽自己所能消灭最多能消灭的怪物即可. 踩坑点:消灭的怪物数量可能超出了整形(int)范围,所以不应该使用int,而应该使用long.这题和四渠注水问题类似,我再一次踩坑.发篇博客警示自己,不要再犯这种低级错误! 代码 import java.util.Scanner; public class C { public static void main(String[] args) { Scanner in = new Scanner(System.in)