>>>func5(x=3,y=4,z=5)
7
{'x': 3, 'y': 4, 'z': 5}
#Пункт 4.9
>>>a=90
>>>def func3(b): b=5*b+67
>>>func3(a)
>>>print(a)
90
#Значение a не изменилось.
>>>sps1=[1,2,3,4]
>>>def func2(sps): sps[1]=99
>>>func2(sps1)
>>>print(sps1) [1, 99, 3, 4]
#Второе значение в списке sps1 изменилось и стало равно 99 после вызова функции func2 с аргументом sps1.
>>>kort=(1,2,3,4)
>>>func2(kort)
Traceback (most recent call last):
File "<pyshell#83>", line 1, in <module> func2(kort)
File "<pyshell#78>", line 2, in func2 sps[1]=99
TypeError: 'tuple' object does not support item assignment
#При вызове функции func2 с аргументом-кортежем выдается ошибка, так как кортеж - неизменяемый тип объекта, а в функции делается попытка изменить второй элемент кортежа.
#Пункт 5.1
>>>import math
>>>anfun1=lambda: 1.5+math.log10(17.23)
>>>anfun1()
2.7362852774480286
>>>anfun2=lambda a,b : a+math.log10(b)
>>>anfun2(17,234)
19.369215857410143
>>>anfun3=lambda a,b=234: a+math.log10(b)
>>>anfun3(100)
102.36921585741014
#Пункт 5.2
>>>def func5(diap,shag):
"""Итератор, возвращающий значения из диапазона от 1 до diap с шагом shag""" for j in range(1,diap+1,shag):
yield j
>>>for mm in func5(7,3):
print(mm)
1
4
7
>>>alp=func5(7,3)
>>>print(alp.__next__())
1
>>>print(alp.__next__())
4
>>>print(alp.__next__())
7
>>>print(alp.__next__())
6
Traceback (most recent call last):
File "<pyshell#103>", line 1, in <module> print(alp.__next__())
StopIteration
#При очередном выполнении инструкции выдается ошибка, в которой говорится о том, что произошло прекращение итераций (все итерации пройдены).
#Пункт 5.3
>>> def func_dec(ff): print("Функция:",ff) return ff
>>> @func_dec def func6(aa):
return math.log10(aa)+12*math.sin(aa)
Функция: <function func6 at 0x000001CB95A90678>
>>>bb=1234
>>>func_dec(func6)(bb)
Функция: <function func6 at 0x000001CB95A90678> 10.31444701684719
#Пункт 6.1
>>>glb=10
>>>def func7(arg): loc1=15 glb=8
return loc1*arg
>>>res=func7(glb)
>>>print(res)
150
#При получении результата использовались значения локального объекта loc1=15 и глобального объекта glb=10; возвращаемое функцией значение не зависит от локального объекта glb=8.
>>>print(glb)
10
#Значение глобального объекта не изменилось.
>>>def func8(arg): loc1=15 print(glb) glb=8
return loc1*arg
>>>res=func8(glb)
Traceback (most recent call last):
File "<pyshell#124>", line 1, in <module> res=func8(glb)
File "<pyshell#123>", line 3, in func8 print(glb)
UnboundLocalError: local variable 'glb' referenced before assignment
#Ошибка возникает, так как в функции локальный объект glb вызывается на печать до того, как его определили. Глобальный объект glb используется в функции под именем arg и не имеет отношения к ошибке.
>>>glb=11
>>>def func7(arg): loc1=15 global glb print(glb) glb=8
return loc1*arg
>>>res=func7(glb)
11
>>> print(glb) 8
#После завершения работы функции значение глобального объекта изменилось, так как в теле функции он был определен как глобальный, а не локальный, и после этого ему было присвоено новое значение.
#Пункт 6.2
7
>>> globals().keys()
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'logistfun', 'slozh', 'b1', 'b2', 'b3', 'b4', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func42', 'slv', 'func5', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'mm', 'alp', 'func_dec', 'func6', 'bb', 'glb', 'func7', 'res', 'func8', 'uspeh', 'sravnenie', 'n', 'm', 'v', 'w', 'q', 'c1', 'c2', 'c3', 'c4', 'q2', 'd1', 'd2', 'd3', 'd4', 'i1', 'i2', 'i3', 'i4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz'])
#По инструкции выводятся имена глобальных объектов.
>>> locals().keys
<built-in method keys of dict object at 0x000001CB94C6F138>
#По инструкции не выводятся имена локальных объектов. К локальному объекту нельзя обратиться из глобальной области видимости, можно обратиться только в момент выполнения тела функции, в которой этот объект находится.
>>>def func8(arg): loc1=15 glb=8
print(globals().keys()) print(locals().keys()) return loc1*arg
>>>hh=func8(glb)
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'logistfun', 'slozh', 'b1', 'b2', 'b3', 'b4', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func42', 'slv', 'func5', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'mm', 'alp', 'func_dec', 'func6', 'bb', 'glb', 'func7', 'res', 'func8', 'uspeh', 'sravnenie', 'n', 'm', 'v', 'w', 'q', 'c1', 'c2', 'c3', 'c4', 'q2', 'd1', 'd2', 'd3', 'd4', 'i1', 'i2', 'i3', 'i4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz']) dict_keys(['arg', 'loc1', 'glb'])
#Перечень имен глобальных объектов не изменился. В перечне имен локальных объектов появились имена arg, loc1, glb - локальных объектов, находящихся в теле функции func8.
>>>'glb' in globals().keys()
True
#Объект glb есть в перечне глобальных объектов.
#Пункт 6.3
>>>def func9(arg2,arg3):
def func9_1(arg1): loc1=15 glb1=8
print('glob_func9_1:',globals().keys()) print('locl_func9_1:',locals().keys()) return loc1*arg1
loc1=5 glb=func9_1(loc1)
print('loc_func9:',locals().keys()) print('glob_func9:',globals().keys()) return arg2+arg3*glb
>>> kk=func9(10,1)
glob_func9_1: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'logistfun', 'slozh', 'b1', 'b2', 'b3', 'b4', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func42', 'slv', 'func5', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'mm', 'alp', 'func_dec', 'func6', 'bb', 'glb', 'func7', 'res', 'func8', 'uspeh', 'sravnenie', 'n', 'm', 'v', 'w', 'q', 'c1', 'c2', 'c3', 'c4', 'q2', 'd1', 'd2', 'd3', 'd4', 'i1', 'i2', 'i3', 'i4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'hh', 'func9', 'loc1'])
locl_func9_1: dict_keys(['arg1', 'loc1', 'glb1'])
loc_func9: dict_keys(['arg2', 'arg3', 'func9_1', 'loc1', 'glb'])
glob_func9: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'logistfun', 'slozh', 'b1', 'b2', 'b3', 'b4', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func42', 'slv', 'func5', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'mm', 'alp', 'func_dec', 'func6', 'bb', 'glb', 'func7', 'res', 'func8', 'uspeh', 'sravnenie', 'n', 'm', 'v', 'w', 'q', 'c1', 'c2', 'c3', 'c4', 'q2', 'd1', 'd2', 'd3', 'd4', 'i1', 'i2', 'i3', 'i4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'hh', 'func9', 'loc1'])
#Перечни имен глобальных объектов для функций func9 и func9_1 совпадают. Перечень имен локальных объектов func9_1 содержит объекты arg1, loc1=15, glb1=1. Перечень имен локальных объектов func9 содержит объекты arg2, arg3, loc1=5, glb1=func9_1(loc1). При вызове func9 с аргументами 10 и 1 значение kk получается равным 10+1*(15*5)=85.
>>>print(kk)
85
#Пункт 6.4
>>>znach=input('k1,T,k2,Xm,A,F,N=').split(',') k1,T,k2,Xm,A,F,N=3,10,2,0.2,1,2,5
>>>k1=float(znach[0])
>>>T=float(znach[1])
8
>>>k2=float(znach[2])
>>>Xm=float(znach[3])
>>>A=float(znach[4])
>>>F=float(znach[5])
>>>N=int(znach[6])
>>>import math
>>>vhod=[]
>>>for i in range(N):
vhod.append(A*math.sin((2*i*math.pi)/F))
>>> print(vhod)
[0.0, 1.2246467991473532e-16, -2.4492935982947064e-16, 3.6739403974420594e-16, -4.898587196589413e-16]
>>> def realdvig(xtt,kk1,TT,yti1,ytin1):
#Модель реального двигателя yp=kk1*xtt #усилитель yti1=yp+yti1 #Интегратор ytin1=(yti1+TT*ytin1)/(TT+1) return [yti1,ytin1]
>>> def tahogen(xtt,kk2,yti2):
#Модель тахогенератора yp=kk2*xtt #усилитель yti2=yp+yti2 #интегратор return yti2
>>> def nechus(xtt,gran):
#зона нечувствительности if xtt<gran and xtt>(-gran):
ytt=0 elif xtt>=gran:
ytt=xtt-gran elif xtt<=(-gran):
ytt=xtt+gran return ytt
>>>yi1=0;yin1=0;yi2=0
>>>vyhod=[]
>>>for xt in vhod:
xt1=xt-yi2 [yi1,yin1]=realdvig(xt1,k1,T,yi1,yin1) yi2=tahogen(yin1,k2,yi2) yt=nechus(yin1,Xm) vyhod.append(yt)
>>> print('y=',vyhod) y= [0, 0, 0, 0, 0]
9