def fun(var):
var=1314
print(var,end="...")
var=520
print(var)#这里的var是 全局变量外部的var=520
fun(var)#这里的var是函数局部变量 内部的 var=1314
print(var)#还是只能调用函数全局变量 外部的
var只有在函数体内或者和函数一起使用时,才调用局部变量
【函数 嵌套】可以这么叫吗,够呛
【看看执行什么】
def next():
print('in next')
pro()
def pro():
print('in pro')
>>> next()
in next
in pro
【看看执行什么】
函数内部不能改变var=1314,不能改变var=520,520就是放第一句也是一样
def fun(var):
var=1314
print(var,end=' ')
var=520
fun(var)
print(var)
>>>
= RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/00.py
520 1314
【为什么出错】而加上 var=520 就能执行了
def fun(var):
var=1314
print(var,end='')
fun(var)
>>>
Traceback (most recent call last):
File "C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/00.py", line 4, in
fun(var)
NameError: name 'var' is not defined
【这样就好了】
var=1314
def fun(var):
print(var)
fun(var)
【或是这样】
def a():
return 1314
print(a())
Python中定义函数时,若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global。
例子1
x = 1
def func():
x = 2
func()
print(x)
输出:1
在func函数中并未在x前面加global,所以func函数无法将x赋为2,无法改变x的值
例子2
x = 1
def func():
global x
x = 2
func()
print(x)
输出:2
加了global,则可以在函数内部对函数外的对象进行操作了,也可以改变它的值了
例子3
global x
x = 1
def func():
x = 2
func()
print(x)
输出:1
1)局部变量:函数里的变量
2)全局变量:在函数外的变量
注意:在函数里修改全局变量是无效的,python会新建与全局变量名字相同的局部变量
全局变量 global需要在函数内部声明,若在函数外声明,则函数依然无法操作x
var="hi "
def fun1():
#global var#这句定义全局函数 意义何在?
var='baby '
return fun2(var)
def fun2(var):
var=var+'i love you '
#fun3(var) #这个意义何在?
return var
def fun3(var):
var='小甲鱼'
print(fun1())
print(fun2(var))
print(fun3(var))
>>>
= RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/00.py
baby i love you
hi i love you
None
函数执行过程是这样的。
1步:var = ’ Hi ’ 这里var是全局变量,定义了var的值是字符串’ Hi ’
2步:执行打印语句 print(fun1()) 打印内容是函数fun1()的返回值,调用函数fun1()
3步:进入函数fun1()中,global关键字把var在函数fun1()中,把全局变量var的值由 ’ Hi ‘ 修改为’ Baby ',返回函数fun2(var)的值,开始调用fun2(var)函数
4步:进入函数fun2()中,传入var的值’ Baby ‘,执行var+=‘I love you’ 即 var 在fun2()中是‘ Baby I love you’,
5步:执行fun3(var),调用fun3(var),传入参数var=’ Baby ‘,执行语句,在fun3(var)内,把var赋值为’小甲鱼’,返回值是None
6步:在fun2(var)中,返回var的值,即’ Baby I love you‘
7步:在fun1(var)中,返回fun2(var)的值,显示结果为 ’ Baby I love you’
————————————————
版权声明:本文为CSDN博主「拉风的DPC」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yishfd/article/details/73456355
第 1 个字符串 含有: 数字= 3 字母= 7 空格= 3 其他= 1
第 2 个字符串 含有: 数字= 0 字母= 3 空格= 0 其他= 0
def 统计(*x):
#x='pyshell#1 24','abc'
长度=len(x)
for each in range(长度):#0和1
print('第',each+1,'个字符串','含有:',end=" ")
数字=0
字母=0
空格=0
其他字符=0
for i in x[each]:#0和1
if i.isdigit():
数字+=1
elif i.isalpha():
字母+=1
elif i.isspace():
空格+=1
else:
#print(x[i],end=" ")
其他字符+=1
print('数字=',数字,'字母=',字母,'空格=',空格,'其他=',其他字符)
#x=input('请你输入要统计的字符串(两个或两个以上请用“,”隔开):')
#统计(*x)
统计('pyshell#1 24','abc')
>>> = RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/00.py
请你输入要统计的字符串(两个或两个以上请用“,”隔开):
= RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/0.py
第 1 个字符串 含有: 数字= 3 字母= 7 空格= 3 其他= 1
第 2 个字符串 含有: 数字= 0 字母= 3 空格= 0 其他= 0
【input输入 不能分割的问题】
*【找到原因了,定义函数可以(prame),input却不能】
【不能】#x=input('请你输入要统计的字符串(两个或两个以上请用“,”隔开):')
【也不能】#统计(*x)
【只能】统计('pyshell#1 24','abc')
【↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓】
x=tuple(input('请你输入要统计的字符串(两个或两个以上请用“,”隔开):'))
print(len(x))
>>>
= RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/00.py
请你输入要统计的字符串(两个或两个以上请用“,”隔开):aaa,bbb
7
【↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑输出的是 7 而不是 2 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑】
global
var=5
def fun2():
global var
var*=var
return var
nonlocal
def fun1():
var=5
def fun2():
nonlocal var
var*=var
return var
return fun2()
def funout():
x=5
def funin():
nonlocal x
x+=1
return x
return funin #(不能加括号,)
a=funout()
>>>==================================================
>>> print(a())
6
>>> print(a())
7
有些鱼油可能比较迷惑,局部变量x不是应该在每次调用的时候 被x=5初始化了吗? 其实 当 a=funout()的时候,只要a没有别重置,funout()就没有被释放,也就说局部变量x就没有被初始化 ,所以当全局变量不适用时候,可以考虑使用闭包更稳定和安全
千行长字符串
str1="""%%$@_$^__#)
^)&!_+]!*@&^}{!
{_]%}$!){%^"""#两行字符串 用三个引号的目的是 忽略长字符中的个符号
list1=[]
for each in str1: #枚举
if each not in list1:#归类
if each=='\n':#先找特殊的 回车 \n 统计多少行
print('长字符串总共',str1.count(each)+1,'行')
else:
print(each,str1.count(each))#统计每个字符出现的次数
list1.append(each)
>>> = RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/000.py
% 4
$ 3
@ 2
_ 5
^ 4
# 1
) 3
长字符串总共 3 行
& 2
! 4
+ 1
] 2
* 1
} 2
{ 3
规律:
1、每个密码为单独小写字母
2、每位密码的左右两边均有且只有三个大写字母
str1=''' @]$^#(BBBaCCC&&{){WWWcERd)_[}{@(}GGDwPDK#)!)%&
({+$[!#()[]%{$_*]
*^%&]@'''
list1=[]
for each in str1:
if each.islower():
i=str1.find(each)
if str1[(i-3):i].isupper() and str1[(i+1):(i+4)].isupper() and (not str1[i-4].isupper()) and (not str1[i+4].isupper()):
list1.append(each)
print(list1)
>>> = RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/000.py
['a', 'w']