一、习题收藏

 5、写函数,计算传入字符串中【数字】、【字母】、【空格】 以及 【其他】的个数,并返回结果。
# def func4(s):
# dic = {
# 'num':0,'alpha':0,'space':0,'others':0
# }
# for i in s:
# if i.isdigit():
# dic['num'] += 1
# elif i.isalpha():
# dic['alpha'] +=1
# elif i.isspace():
# dic['space'] += 1
# else:
# dic['others'] += 1
# return dic
# s = 'asdjk2330 sdjkfh#$^&'
# ret = func4(s)
# print(ret)
# 6、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。
# def func5(s_l_t):
# if s_l_t:
# for i in s_l_t:
# if not i and i != 0 and i != False:
# return True
# else:
# return True # 7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
# dic = {"k1": "v1v1", "k2": [11,22,33,44]}
# PS:字典中的value只能是字符串或列表
# def func6(dic):
# for k in dic:
# value = dic[k]
# if len(value) > 2:
# dic[k] = value[:2]
# return dic
# def func6(dic):
# for k in dic:
# dic[k] = dic[k][:2]
# return dic
# dic = {"k1": "v1v1", "k2": [11,22,33,44]}
# print(func6(dic))
# 8、写函数,接收两个数字参数,返回比较大的那个数字。
# a = 1
# b = 2
# def func7(a,b):
# if a > b:
# return a
# else:
# return b
# print(func7(1,1))
#
# #三元运算符
# c = 0
# if a>b:
# c = a
# else:
# c = b #新知识:重要程度五颗星*****
# c = a if a>b else b # 三元运算符 三元运算表达式

初始函数的作业题

def fun(a,b):
c = a if a>b else b # 三元运算符 三元运算表达式
return c
print(fun(1,2)) #2

二、动态参数

#动态参数
#*args :接收所有按照位置传的参数,接收到的是参数组成的元祖

#*args  :接收所有按照位置传的参数,接收到的是参数组成的元祖
def func1(*args):
print(args)
func1('name',18,'e') # args = ('name', 18, 'e')
# 注:名字不一定是args 这是使用习惯,方便代码阅读
# 注:如果调用args时候前边加了一个* 便是将其迭代的形式变为形参 字符串前加*会变成单个元素
#注 :*args 在位置参数之后。关键字参数的前边
def func1(*args):
print(*args)
func1(*('name',18,'e')) #name 18 e
#传入的参数也可以用*打散

def my_sum(*args): #求合
# print(args)
# # sum_2 = 0
# # for i in args:
# # sum_2 += i
# # return sum_2
# l = [1,24,5,7]

可以求和

#**kwargs :接收所有按照关键字传的参数,接收到的是参数组成的字典

#**kwargs   :接收所有按照关键字传的参数,接收到的是参数组成的字典
def func1(**kwargs):
print(kwargs)
func1(**{'abc':2,'bcd':3}) #{'a': 2, 'b': 3} 如果用*号得到的是key的参数
#所有的参数的顺序:位置参数,*args,默认参数,**kwargs
#keywords must str
#顺序:
#在调用函数的时候,可以打散:*l(按顺序打散)、**dic(打散)

#所有的参数的顺序:位置参数,*args,默认参数,**kwargs

二 、命名空间

#namespace 命名空间,名称空间
#局部命名空间:每一个函数都拥有自己的命名空间
#全局命名空间:写在函数外面的变量名
#内置命名空间:python解释器启动之后就可以使用的名字
#python的解释器要运行起来
#加载顺序:
# 先所有内置命名空间的中的名字-->然后按照顺序加载全局命名空间中的名字
#局部命名空间中的名字:在调用函数的时候产生,并且随着调用的结束而消失

如下代码的加载顺序:

# func(1,2,3,4,5)
# def f1(): 1
# a = 1 3
# def f2(): 4
# def f3(): 6
# a = 3 8
# print(a) 9
# f3() 7
# f2() 5
# f1() 2

三、函数的嵌套

嵌套内部的函数不能直接被外部调用,只能由他的上一层函数调用,或者自身将函数名返回到外层

#函数的嵌套定义
# def func():
# def qqxing():
# print('我是qqxing')
# qqxing()
# func() # print(len('123'))
# def len(x):
# print('***%s***'%x)
#
# len('123') #函数的嵌套定义
# n = 0
# def func1():
# def func2():
# print(n)
# func2()
#
# func1()
#fun2() 会报错
四、作用域

#作用域:一个名字可以使用的区域
#全局作用域:内置名字空间和全局名字空间中的名字都属于全局作用域
#局部作用域:局部名字空间中的名字属于局部作用域
#局部作用域可以使用全局作用域中的变量
#而全局作用域不能使用局部作用域中的变量
#局部作用域中还可以嵌套更小的局部作用域
#作用域链:小范围作用域可以使用大范围的变量,但作用域链是单向的,不能反向应用

# func1()
# def func():
# a = 10
# b = 20
# print(locals()) #保存了当前作用域中变量
# print(globals()) # n = 10
# m = 22
# print(globals()) #保存了在全局作用域中的名字和值
# func() #globals() #保存了在全局作用域中的名字和值
#locals() #中的内容会根据执行的位置来决定作用域中的内容
#如果在全局执行
#globals和locals打印的结果是一致的

如果局部作用域中的想修改全部变量,那么用globals  如果局部内层函数想修改外层函数那么用nonlocals

n = 1
def func2():
n = 2
def func3():
nonlocal n # 使用nonlocak前,本层函数不能出现该变量
n+=1
#print(n)
#global n # 使用nonlocak前,所有层函数不能出现该变量
n += 10
func3()
print(n)
func2()
print(n)

五、第一类对象(函数名)

#第一类对象的概念:
#函数名可以赋值
#可以作为一个数据结构的元素
#可以作为一个函数的参数
#可以作为一个函数的返回值
def func():
print('in func')
return 10 def func2(arg):
arg()
return arg f = func2(func)
f() #可以作为参数传递
def f1():
pass
def f2():
pass
def f3():
dic = {'alex':f1,'tai':f2}
name = input('请输入账户名:')
if name in dic:
dic[name]()
f3()

day11函数的进阶动态参数,命名空间,作用域,第一类对象的更多相关文章

  1. 函数的进阶(动态参数,命名空间和作用域,函数的嵌套,gloabal和nonlocal关键字)

    1. 函数参数--动态传参 昨天已经解过了传参, 如果需要给一个函数传参,而参数又是不确定的. 或者我们给一个函数传很多参数, 我的形参就要写很多, 写起来就很麻烦, 这时我们可以考虑使用动态参数.形 ...

  2. python 全栈开发,Day10(动态参数,命名空间,作用域,函数嵌套)

    一.动态参数 def func(a,b,c,d,e,f,g): pass func(1,2,3,4,5,6,7) 如果加30个参数呢?有没有万能的参数,可以代表一切参数呢? *args 动态参数,万能 ...

  3. python 函数的动态参数 命名空间,作用域以及函数嵌套,global和nonlocal (重点)

    *** 坚持坚持,即使你不太强*** 1.函数的动态传参 2.函数的命名空间及作用域 3.函数嵌套 4.global和nonlocal关键字 一.函数的动态传参 1. *args: 位置参数动态传参, ...

  4. 【学习笔记】--- 老男孩学Python,day10, 函数, 动态参数 命名空间\作用域 global nonlocal

    1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序:位置---*args---默认值---**kwargs 在形参上*聚合, **聚合 在实参上*打散, ...

  5. python基础学习Day10 函数形参的动态参数、*args **kwargs 命名空间 global 与 nonlocal

    一.函数形参的动态参数 原因:为了拓展,对于实参数量不固定,故需要万能参数,即动态参数, *args   **kwargs # def sum1(*args): # 在函数定义时,在*位置参数,聚合. ...

  6. python函数知识二 动态参数、函数的注释、名称空间、函数的嵌套、global,nonlocal

    6.函数的动态参数 *args,**kwargs:能接受动态的位置参数和动态的关键字参数 *args -- tuple *kwargs -- dict 动态参数优先级:位置参数 > 动态位置参数 ...

  7. Python学习5——抽象,涉及抽象和结构、函数的自定义、参数、作用域、递归

    此处将抽象和结构.自定义函数.参数的使用.作用域.递归放在一起学习,看起来很怪是不是? 但实际上这几者之间是有紧密联系的,不然Python基础教程(第三版)的作者为什么会把它们放在一起哪?手动滑稽 好 ...

  8. javascript 红宝书笔记之函数、变量、参数、作用域

    ECMAScript 不介意传进来多少个参数,也不介意传进来的参数类型.     理解参数:      命名的参数只提供便利,不是必需的.     ECMAScript 的变量包含两种不同的数据类型的 ...

  9. function(函数)中的动态参数

    我们可向函数传递动态参数,*args,**kwargs,首先我们来看*args,示例如下:     1.show(*args) def show(*args): print(args,type(arg ...

随机推荐

  1. android BSP与硬件相关子系统读书笔记(1)android BSP移植综述

    从linux驱动转行至Android驱动开发大半年了,一开始就产生了一个很纠结目标和问题,就是不停的google如何porting android!这个问题得到的结果对于初出茅庐的我,感到迷惘.随着工 ...

  2. python 推导式(Comprehensions)

    一.介绍 列表推导(list comprehensions) 这是一种将for循环.if表达式以及赋值语句放到单一语句中的一种方法.换句话说,你能够通过一个表达式对一个列表做映射或过滤操作. 一个列表 ...

  3. 【机器学习 & 数据挖掘 通俗介绍】

    如何向小白介绍何谓机器学习和数据挖掘?买回芒果他就懂了 JasonZheng • 2013-01-07 22:18   买芒果 嘴馋的你想吃芒果了,于是你走到水果摊,挑了几个让老板过过秤,然后你再根据 ...

  4. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何让不同的PLC程序分线程运行 TC3

    右击Tasks,添加一个新的Task   可以为这个线程设置自定义的扫描周期   然后在项目上右击添加Referenced Task   在TaskSub1上右击添加现有项,把之气写好的PRG程序绑定 ...

  5. js 根据身份证获取出生日期及性别

      js根据身份证获取出生日期及性别 CreateTime--2017年6月2日11:45:16Author:Marydon 第一步:身份证号格式校验 /** * 身份证号格式校验 */ functi ...

  6. DLL内存分配与共享

    一旦DLL的文件映像被映射到调用进程的地址空间中,DLL的函数就可以供进程中运行的所有线程使用.实际上,DLL几乎将失去它作为DLL的全部特征.对于进程中的线程来说,DLL的代码和数据看上去就像恰巧是 ...

  7. SSH——基于datagrid实现分页查询

    1. 修改页面中datagrid的URL地址,访问action // 取派员信息表格 $('#grid').datagrid( { iconCls : 'icon-forward', fit : tr ...

  8. 使用CXF实现基于Soap协议的WebService

    本文介绍使用CXF实现基于Soap协议的WebService(CXF的版本是3.0.0) 一. 前言 Java有三种WebService规范:Jax-WS,Jax-RS,Jaxm 1. Jax-WS( ...

  9. SSH框架中POJO层, Dao层,Service层, Action层的功能理解

    pojo层就是对应的数据库表的实体类(如User类). dao层,一般可以再分为***dao接口和***daoImpl实现类,如userDao接口和userDaoImpl实现类,接口负责定义数据库cu ...

  10. 8.1.3 在BroadcastReceiver中启动Service

    2010-06-21 16:57 李宁 中国水利水电出版社 字号:T | T <Android/OPhone开发完全讲义>第8章Android服务,本章主要介绍了Android系统 中的服 ...