+ 6
Does the walrus operator work for functions(methods) too?
In Python all is object. So if wo:= 3 or wo:=str.center should not matter. but I dont get it. I cant create a program for it. yeah there are lambdas, but I WANT WALRUS. EDIT: I wanted center(20) as walrus .... see prog https://code.sololearn.com/c2hdaPD1J8iC/?ref=app
8 Answers
+ 7
I think you are looking for something like this. You can bind a lambda which will center a piece of text, to a variable with walrus, then reuse the same lambda later.
print((y := lambda t: t.center(20))("hello"), y("world"), sep="\n")
+ 4
Denise Roßberg tbh: I wanted center(50) as a walrus...
i dont want to define before but inline
.... Now I can say clearly what the problem is.
+ 3
Hi Oma Falk
Do you mean something like this?
def fun():
print('test')
(walrus:=fun)
walrus()
+ 3
independent of the walrus operator: if you only store the method center, I wonder how a string should access it.
x = str.center
And now? "abc".x(20) will not work, because str does not know x.
+ 3
If you do...
x := str.center
... you are storing the type's original method.
Using that, you would have to pass 'self' by hand, because x is not an instance method.
So you'd have to use...
x('your string', 42)
... instead of just ...
x(42)
I can imagine hacks like this one, just to illustrate:
print((x := str.center)('hello', 9), x('world', 9))
Alternatively, you can store the instance method as well, but then you can only call it for that specific str object.
print([x:='Hello'.center, x(7)][1], x(9), x(11), sep='\n')
Here, first the string 'Hello' is created, its method center bound to the name x, and then the method is called several times for the object it belongs to.
+ 2
works also:
st = "test"
(wo:=st.center(50))
print(wo)
Unfortunately I forgot where I have read that walrus operator needs brackets.
Normally you use it inside an expression, maybe it has something to do with that.
+ 1
(w:=lambda x,y:x.center(y))
do you mean something similar to this?
or like
(p:=print)