一、习题收藏

 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. python抓取日本网站上iphone5的价格

    抓取日本网站上iphone5的价格,比国内便宜好多汇率换算是在中国银行的网站上取得 #-*- coding:utf-8 -*- import requests import time from bs4 ...

  2. gcc编译错误:DSO missing from command line

    在用gcc 编译连接的时候,可能会遇到类似以下的错误: /usr/bin/ld: test_desktop_utils-test-desktop-utils.o: undefined referenc ...

  3. 【Git】Git hangs while unpacking objects (Windows)

    Git hangs while unpacking objects (Windows) 14 Oct 2014 I'm not sure if this is because we're behind ...

  4. 解决Linux关闭终端(关闭SSH等)后运行的程序或者服务自动停止【后台运行程序】

    问题描述:当SSH远程连接到服务器上,然后运行一个服务 ./catalina.sh start,然后把终端开闭(切断SSH连接)之后,发现该服务中断,导致网页无法访问.   解决方法:使用nohup命 ...

  5. 转:ios的crash框架方法论

    http://www.cocoachina.com/ios/20150701/12301.html 1. 其中提到的提高ios崩溃率的用法.

  6. shell学习小结

    小结 本章我么介绍了怎样使用ls与stat露出文件与文件meta数据,还有怎样使用touch设置未见时间戳.touch可显示有关日期时间相关的信息以及在很多现行系统上的范围限制. 说明了怎样以shel ...

  7. Python程序员的10个常见错误

    关于Python Python是一门解释性的,面向对象的,并具有动态语义的高级编程语言.它高级的内置数据结构,结合其动态类型和动态绑定的特性,使得它在快速应用程序开发(Rapid Applicatio ...

  8. HttpClient Coder Example

    Example 1:   HttpClient httpClient = new HttpClient();                 httpClient.getHostConfigurati ...

  9. 【转载】HTTP和SOAP完全就是两个不同的协议

    http:是一个客户端和服务器端请求和应答的标准(TCP). http协议其目的是为了提供一种发布和接收htttp页面的方法 http协议的客户端与服务器的交互:由HTTP客户端发起一个请求,建立一个 ...

  10. ConfigurationManager.AppSettings 属性 appSettings

    https://msdn.microsoft.com/zh-cn/library/system.configuration.configurationmanager.appsettings(v=vs. ...